fix: fix validator in input-number and switch and add some code demo

This commit is contained in:
mangogan 2019-08-07 15:20:24 +08:00
parent c48b9171c3
commit c499d34b79
4 changed files with 87 additions and 8 deletions

View File

@ -271,6 +271,7 @@
ref="form-validate" ref="form-validate"
:model="validateForm" :model="validateForm"
:rules="validateRules" :rules="validateRules"
:label-width="100"
> >
<n-form-item <n-form-item
label="Warning" label="Warning"
@ -296,6 +297,15 @@
</template> </template>
<span>Test nesting formItem in resetForm</span> <span>Test nesting formItem in resetForm</span>
</n-popover> </n-popover>
<n-form-item
prop="inputNumber"
label="InputNumber"
>
<n-input-number
v-model="validateForm.inputNumber"
placeholder="n-input-number"
/>
</n-form-item>
<n-form-item <n-form-item
prop="muti.deep.select" prop="muti.deep.select"
label="Select" label="Select"
@ -365,6 +375,15 @@
<n-form-item prop="input" label="Input"> <n-form-item prop="input" label="Input">
<n-input v-model="validateForm.input" placeholder="Enter string" /> <n-input v-model="validateForm.input" placeholder="Enter string" />
</n-form-item> </n-form-item>
<n-form-item
prop="inputNumber"
label="InputNumber"
>
<n-input-number
v-model="validateForm.inputNumber"
placeholder="n-input-number"
/>
</n-form-item>
<n-form-item prop="muti.deep.select" label="Select"> <n-form-item prop="muti.deep.select" label="Select">
<n-select <n-select
size="small" size="small"
@ -419,9 +438,22 @@
callback() callback()
} }
} }
var inputNumberValidate = (rule, value, callback) => {
console.log('blur', value)
callback()
}
var inputNumberValidateChange = (rule, value, callback) => {
console.log('change', value)
callback()
}
var switchValidate = (rule, value, callback) => {
console.log('switch change', value)
callback()
}
return { return {
validateForm: { validateForm: {
input: "", input: "",
inputNumber: undefined,
muti: { muti: {
deep: { deep: {
select: "" select: ""
@ -432,6 +464,14 @@
radio: "" radio: ""
}, },
validateRules: { validateRules: {
switch: [
{ validator: switchValidate, trigger: 'change' }
],
inputNumber: [
{ required: true, message: 'input cannot be empty', trigger: 'blur' },
{ validator: inputNumberValidate, trigger: 'blur' },
{ validator: inputNumberValidateChange, trigger: 'change' }
],
input: [ input: [
{ required: true, message: "input cannot be empty", trigger: "blur" } { required: true, message: "input cannot be empty", trigger: "blur" }
], ],
@ -747,6 +787,18 @@ export default {
callback() callback()
} }
} }
var inputNumberValidate = (rule, value, callback) => {
console.log('blur', value)
callback()
}
var inputNumberValidateChange = (rule, value, callback) => {
console.log('change', value)
callback()
}
var switchValidate = (rule, value, callback) => {
console.log('switch change', value)
callback()
}
return { return {
form: { form: {
name: '', name: '',
@ -779,6 +831,7 @@ export default {
], ],
validateForm: { validateForm: {
input: '', input: '',
inputNumber: undefined,
muti: { muti: {
deep: { deep: {
select: 'Public' select: 'Public'
@ -792,6 +845,14 @@ export default {
radio: '' radio: ''
}, },
validateRules: { validateRules: {
switch: [
{ validator: switchValidate, trigger: 'change' }
],
inputNumber: [
{ type: 'number', required: true, message: 'input cannot be empty', trigger: 'blur' },
{ validator: inputNumberValidate, trigger: 'blur' },
{ validator: inputNumberValidateChange, trigger: 'change' }
],
input: [ input: [
{ required: true, message: 'input cannot be empty', trigger: 'blur' } { required: true, message: 'input cannot be empty', trigger: 'blur' }
], ],

View File

@ -75,9 +75,6 @@ export default {
}, },
mixins: [ Emitter ], mixins: [ Emitter ],
inject: { inject: {
form: {
default: null
},
formItem: { formItem: {
default: null default: null
} }
@ -129,11 +126,6 @@ export default {
isComposing: false isComposing: false
} }
}, },
computed: {
validateState () {
return this.formItem ? this.formItem.validateState : ''
}
},
methods: { methods: {
handleCompositionStart () { handleCompositionStart () {
this.isComposing = true this.isComposing = true

View File

@ -38,6 +38,7 @@
<script> <script>
import NIcon from '../../Icon/index' import NIcon from '../../Icon/index'
import Emitter from '../../../mixins/emitter'
const DEFAULT_STEP = 1 const DEFAULT_STEP = 1
@ -59,6 +60,12 @@ export default {
components: { components: {
NIcon NIcon
}, },
mixins: [ Emitter ],
inject: {
formItem: {
default: null
}
},
props: { props: {
value: { value: {
type: Number, type: Number,
@ -122,6 +129,7 @@ export default {
} }
} }
this.$emit('change', newValue, oldValue) this.$emit('change', newValue, oldValue)
this.formBlur('change', newValue)
/** /**
* newValue === oldValue won't trigger watcher! * newValue === oldValue won't trigger watcher!
* so the call stack won't fall in loop * so the call stack won't fall in loop
@ -139,6 +147,11 @@ export default {
} }
}, },
methods: { methods: {
formBlur (type, val) {
if (this.formItem) {
this.dispatch('NFormItem', 'on-form-' + type, val)
}
},
add () { add () {
if (this.value === null) { if (this.value === null) {
this.$emit('input', this.aValidValue) this.$emit('input', this.aValidValue)
@ -159,6 +172,7 @@ export default {
const value = e.target.value const value = e.target.value
if (value === '') { if (value === '') {
this.$emit('input', null) this.$emit('input', null)
this.formBlur('blur', value)
return return
} }
const parsedNumber = Number(value) const parsedNumber = Number(value)
@ -168,6 +182,7 @@ export default {
const valueAfterChange = parsedNumber const valueAfterChange = parsedNumber
this.$emit('input', valueAfterChange) this.$emit('input', valueAfterChange)
} }
this.formBlur('blur', parsedNumber)
} }
} }
} }

View File

@ -11,8 +11,16 @@
</template> </template>
<script> <script>
import Emitter from '../../../mixins/emitter'
export default { export default {
name: 'NSwitch', name: 'NSwitch',
mixins: [ Emitter ],
inject: {
formItem: {
default: null
}
},
model: { model: {
prop: 'active', prop: 'active',
event: 'change' event: 'change'
@ -31,6 +39,9 @@ export default {
handleClick () { handleClick () {
if (!this.disabled) { if (!this.disabled) {
this.$emit('change', !this.active) this.$emit('change', !this.active)
if (this.formItem) {
this.dispatch('NFormItem', 'on-form-change', !this.active)
}
} }
} }
} }