一、侦听器:vue中想监听数据的变化
(一)侦听器watch
- 如何侦听到某个变量值改变呢?使用watch配置项
- watch:可以侦听到data/computed属性值的改变。
- 语法:
watch:{
"被侦听的属性名"(newVal, oldVal){
}
}
<template>
<div>
<input type="text" v-model="name" />
div>
template>
<script>
export default{
data(){
return{
name:""
}
},
watch:{
name(newVal, oldVal){
console.log(newVal, oldVal);
}
}
}
script>
(二)监听list变化, 同步到本地案例
- 我们可以通过上篇的文章⛽Vue成绩案例实现添加、删除、显示无数据、添加日期、总分均分以及数据本地化等功能⛽,通过使用侦听器来实现本地数据化存储。简化每次都需要在方法里面添加
- 简单写法:侦听简单数据类型score,获取复杂数据类型list(数量变化)
<script>
export default {
watch:{
list(newval,oldval){
localStorage.setItem("list",JSON.stringify(this.list));
}
}
};
</script>
<div>
<button @click="change">把第一科 分数随机变化button>
div>
<script>
export default {
methods: {
change(){
this.list[0].score = Math.floor(Math.random()*100);
}
},
script>
- 上面虽然页面更改了第一科的数据,但是没有存储到本地。【是因为没有使用侦听器完整的写法】
- 使用完整写法的侦听器:
watch: {
list:{
deep:true,
handler(){
localStorage.setItem("list", JSON.stringify(this.list));
},
immediate:true,
}
}
(三)侦听器:深度侦听和立即执行
- 如果监听的是复杂数据类型,需要深度监听,需要指定deep为true,需要用到监听的完整的写法。