做一个对年龄限制的数据校验
- 原始代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>33</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="root"></div>
<script>
// 对数据做校验的插件
const app = Vue.createApp({
data() {
return {name: 'dell', age: 28}
},
template: `
<div>name: {{name}}, age: {{age}}</div>
`
});
const vm = app.mount('#root')
</script>
</body>
</html>
- 用mixin实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>33</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="root"></div>
<script>
// 对数据做校验的插件
const app = Vue.createApp({
data() {
return {name: 'dell', age: 28}
},
rules: {
age: {
validate: age => age > 25,
message: 'too young'
}
},
template: `
<div>name: {{name}}, age: {{age}}</div>
`
});
app.mixin({
created() {
for(let key in this.$options.rules) {
const item = this.$options.rules[key];
console.log(item)
this.$watch(key, (value) => {
const result = item.validate(value);
if(!result) {
console.log(item.message);
}
})
}
}
})
const vm = app.mount('#root')
</script>
</body>
</html>
- 用插件实现(插件中封装mixin)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>33</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="root"></div>
<script>
// 对数据做校验的插件
const app = Vue.createApp({
data() {
return {name: 'dell', age: 28}
},
rules: {
age: {
validate: age => age > 25,
message: 'too young'
}
},
template: `
<div>name: {{name}}, age: {{age}}</div>
`
});
const validatorPlugin = (app, options) => {
app.mixin({
created() {
for(let key in this.$options.rules) {
const item = this.$options.rules[key];
console.log(item)
this.$watch(key, (value) => {
const result = item.validate(value);
if(!result) {
console.log(item.message);
}
})
}
}
})
}
app.use(validatorPlugin)
const vm = app.mount('#root')
</script>
</body>
</html>