Vee-validate를 사용하여 폼이 올바르게 입력될 때까지 버튼을 비활성화합니다.
폼이 올바르게 입력될 때까지 송신 버튼을 무효로 하고 싶은 경우는, 다음과 같습니다.
<form>
<input type="text" class="form-control" v-validate="'required|email'" name="email" placeholder="Email" v-model="userCreate.userPrincipalName" />
<span v-show="errors.has('email')">{{ errors.first('email') }}</span>
<button v-if="errors.any()" disabled="disabled" class="btn btn-primary" v-on:click="sendInvite();" data-dismiss="modal" type="submit">Send Invite</button>
<button v-else="errors.any()" class="btn btn-primary" v-on:click="sendInvite();" data-dismiss="modal" type="submit">Send Invite</button>
</form>
위에서는 에러 메시지만 출력하고 값 입력을 시작한 후 전송 버튼을 비활성화합니다.입력과 대화하기 전에 빈 문자열을 보낼 수 없도록 처음부터 비활성화해야 합니다.
또 다른 질문은 이 제품을 사용하는 것보다 더 좋은 방법이 있는가 하는 것입니다.v-if
이걸 하기 위해서요?
편집:
userCreate: {
customerId: null,
userPrincipalName: '',
name: 'unknown',
isAdmin: false,
isGlobalAdmin: false,
parkIds: []
}
아마도 가장 간단한 방법은ValidationObserver
폼의 슬롯을 설정합니다.다음과 같이 합니다.
<ValidationObserver v-slot="{ invalid }">
<form @submit.prevent="submit">
<InputWithValidation rules="required" v-model="first" :error-messages="errors" />
<InputWithValidation rules="required" v-model="second" :error-messages="errors" />
<v-btn :disabled="invalid">Submit</v-btn>
</form>
</ValidationObserver>
상세정보 - 검증 옵서버
버튼의 설정:disabled:"errors.any()"
검증 후 버튼을 비활성화합니다.단, 컴포넌트가 처음 로드될 때 이 컴포넌트는 계속 활성화됩니다.
입니다.this.$validator.validate()
에서mounted()
method를 지정하면 @im_method에서 알 수 있듯이 부팅 시 폼이 검증되고 오류 메시지가 즉시 표시됩니다.그 해결방법은 형태를 꽤 추하게 만들 것이다.또,Object.keys(this.fields).some(key => this.fields[key].invalid);
구문은 매우 추악합니다.
대신 버튼을 클릭했을 때 검증기를 실행하여 약속의 유효성을 얻은 후 조건부로 사용하십시오.이 솔루션을 사용하면 부팅 시 폼은 깨끗해 보이지만 버튼을 클릭하면 오류가 표시되고 버튼이 비활성화됩니다.
<button :disabled="errors.any()" v-on:click="sendInvite();">
Send Invite
</button>
sendInvite() {
this.$validator.validate().then(valid=> {
if (valid) {
...
}
})
}
필요한 값이 모두 채워질 때까지 버튼을 비활성화하는 한 가지 방법은 모든 값이 할당되었는지 여부에 관계없이 bool을 반환하는 계산 속성을 사용하는 것입니다.
예:
다음과 같이 계산된 속성을 만듭니다.
computed: {
isComplete () {
return this.username && this.password && this.email;
}
}
그리고 그것을 html에 바인드한다.disabled
속성:
<button :disabled='!isComplete'>Send Invite</button
즉, 다음과 같은 경우 버튼을 비활성화합니다.!isComplete
맞다
또한 당신의 경우 if/else 바인딩 버튼이 두 개 필요 없습니다.양식이 완료되었는지 또는 오류가 있는지 여부에 따라 다음 중 하나만 사용하여 숨기거나 표시할 수 있습니다.
<button :disabled="errors.any() || !isCompleted" class="btn btn-primary" v-on:click="sendInvite();" data-dismiss="modal" type="submit">Send Invite</button>
이 버튼은 모든 필드가 채워지고 오류가 발견되지 않을 때까지 비활성화됩니다.
또 다른 방법은 v-validate를 사용하는 것입니다.이니셜
<input type="text" class="form-control" v-validate.initial="'required|email'" name="email" placeholder="Email" v-model="userCreate.userPrincipalName" />
그러면 페이지가 로드된 후 이메일 입력 요소의 유효성 검사가 실행됩니다.입력과 상호 작용하기 전에 버튼을 비활성화합니다.
양식이 유효하지 않은지 확인하기 위해computed
다음과 같은 속성:
computed: {
isFormInValid() {
return Object.keys(this.fields).some(key => this.fields[key].invalid);
},
},
사용자가 어떤 필드와 상호 작용하기 직전에 체크를 시작하려면 내부에서 수동으로 검증할 수 있습니다.mounted
「 」 「 」 :
mounted() {
this.$validator.validate();
}
또는 계산 사용
computed: {
formValidated() {
return Object.keys(this.fields).some(key => this.fields[key].validated) && Object.keys(this.fields).some(key => this.fields[key].valid);
}
}
및 사용
button :disabled="!formValidated" class="btn btn-primary" v-on:click="sendInvite();" data-dismiss="modal" type="submit">
현재 버전 3의 경우(작성 시점).
순서 1
양식 필드를 볼 수 있는지 확인합니다.
순서 2
대한 .<ValidationObserver ref="validator">
.
순서 3
양식 필드가 변경될 때마다 자동으로 유효성 검사를 트리거합니다.
다음은 예를 제시하겠습니다.
export default {
data() {
return {
form: {
isValid: false,
fields: {
name: '',
phone: '',
}
}
}
},
watch: {
'form.fields': {
deep: true,
handler: function() {
this.updateFormValidity();
}
}
},
methods: {
async updateFormValidity() {
this.form.isValid = await this.$refs.validator.validate({
silent: true // Validate silently and don't cause observer errors to be updated. We only need true/false. No side effects.
});
},
}
}
<button :disabled="form.isValid">
Submit
</button>
계산 속성을 추가할 수 있습니다.
...
computed: {
isFormValid () {
return Object.values(this.fields).every(({valid}) => valid)
}
}
...
버튼에 바인드됩니다.
<button :disabled="!isFormValid" class="btn btn-primary" type="submit">Send Invite</button>
vee-variable 버전 ^2.0.3에서 시도합니다.
언급URL : https://stackoverflow.com/questions/47178484/using-vee-validate-to-disable-button-until-form-is-filled-out-correctly
'programing' 카테고리의 다른 글
컨테이너 프로세스를 시작하여 "exec: \"bash\": $PATH에서 실행 파일을 찾을 수 없음: 알 수 없음 (0) | 2022.09.14 |
---|---|
PHP 프로젝트의 전개/빌드/CI 사이클 설정 (0) | 2022.09.14 |
Vuex – 상태에서 "this" 키워드를 사용하여 하위 컴포넌트의 메서드에 액세스합니다. (0) | 2022.09.14 |
vuex 상태에서 초기화할 데이터 유형과 시기를 선택하십시오. (0) | 2022.09.14 |
Node.js Crypto를 사용하여 HMAC-SHA1 해시를 생성하는 방법은 무엇입니까? (0) | 2022.09.14 |