mirror of
https://github.com/tusen-ai/naive-ui.git
synced 2024-12-27 05:00:48 +08:00
2.6 KiB
2.6 KiB
Custom Rules
<n-form :model="model" ref="form" :rules="rules">
<n-row>
<n-col :span="24">
<n-form-item path="age" label="Age">
<n-input v-model="model.age"/>
</n-form-item>
</n-col>
</n-row>
<n-row>
<n-col :span="24">
<n-form-item path="password" label="Password">
<n-input v-model="model.password" @input="handlePasswordInput" type="password"/>
</n-form-item>
</n-col>
</n-row>
<n-row>
<n-col :span="24">
<n-form-item
path="reenteredPassword"
label="Re-enter Password"
ref="reenteredPassword"
>
<n-input v-model="model.reenteredPassword" type="password"/>
</n-form-item>
</n-col>
</n-row>
<n-row :gutter="[0, 24]">
<n-col :span="24">
<div style="display: flex; justify-content: flex-end;">
<n-button @click="handleValidateButtonClick" round type="primary">Validate</n-button>
</div>
</n-col>
</n-row>
</n-form>
<pre>
{{ JSON.stringify(model, 0, 2) }}
</pre>
export default {
data () {
return {
model: {
age: null,
password: null,
reenteredPassword: null
},
rules: {
age: [
{
validator (rule, value) {
return /^\d*$/.test(value)
},
message: 'Please input an integer',
trigger: 'input'
},
{
validator (rule, value) {
return Number(value) > 18
},
message: 'Age should be above 18',
trigger: 'input'
}
],
reenteredPassword: [
{
validator: this.validatePasswordStartWith,
message: 'Password is not same as re-entered password!',
trigger: 'input'
},
{
validator: this.validatePasswordSame,
message: 'Password is not same as re-entered password!',
trigger: ['blur', 'password-input']
},
{
required: true,
trigger: 'blur'
}
]
}
}
},
methods: {
handlePasswordInput () {
if (this.model.reenteredPassword) {
this.$refs.reenteredPassword.validate('password-input')
}
},
handleValidateButtonClick (e) {
e.preventDefault()
this.$refs.form.validate()
},
validatePasswordStartWith (rule, value) {
return this.model.password && this.model.password.startsWith(value) && this.model.password.length >= value.length
},
validatePasswordSame (rule, value) {
return value === this.model.password
}
}
}