关于$watch的疑问
来源:5-9 数据校验插件开发实例

小菜鸡冲冲冲
2021-04-11
<script>
//插件对数据校验
const app = Vue.createApp({
data(){
return{ name:'dell',
age:25}
},
//自定义一个规则
rules:{
age:{
validate:(age)=>{return age>25},
message:'too young'
},
name:{
validate:(name)=>{return name.length>4},
message:'name too short'
}
},
template:`
<div>name:{{name}},age:{{age}}</div>
`
});
const validatePlugin=(app,options)=>{
app.mixin({
created(){
//.$optionsy用来获取定义在data外的数据和方法
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(validatePlugin)
const vm = app.mount('#root');
</script>
为什么倒数第五行代码$watch的第二个参数可以自动获取改变后的data里的属性值呢;
watch监听器的两个参数不应该分别是现在的属性和改变前的属性吗,这里不太理解
写回答
2回答
-
这个是全局api的写法,你传入第一个参数是需要侦听的对象,第二个参数是一个函数,函数的第一个参数是newValue,第二个是oldValue。
你所说的应该是在vue组件对象里面使用的watch
可能一般你会这样写
watch: {
name (new, old) {}
}
实际上也可以这样
watch: {
name: {
handler (new, old) {}
}
}
全局api调用可以看这里
https://v3.cn.vuejs.org/api/instance-methods.html#watch
132021-04-12 -
小菜鸡冲冲冲
提问者
2021-04-11
而且第一个参数为什么是索引key而不是元素item呢
012021-04-12
相似问题
为什么使用watch监听没有反应
回答 2
关于商品列表的代码优化问题
回答 1