有个关于vue 监听数组对象属性变化的问题想请教下大家?谢谢?
我有个数组对象goods_list_data
我平时操作这个数组对象 修改值都是
this.goods_list_data[index].price_count = price_count
直接去进行修改的
我现在想用watch 监听这个数组对象的某个值的变化,比如this.goods_list_data[index].price_count
watch:{ 'orde_data_obj': (newV, oldV) => {
console.log("watch", newV, oldV)
},
},
但是我好像不管怎么写,也监听不到变化,甚至直接监听这个数组对象也没反应,不知道是哪里有问题?
回答:
使用 $set
去变更对象数组内的属性。
示例代码:
vue"><template> <div>
<button @click="changeListObjData">点击变更</button>
<p>{{list}}</p>
</div>
</template>
<script>
export default {
data(){
return {
list: [{ value: 0 },{ value: 100 },{ value: 10 }]
}
},
watch:{
list(val){
console.log('list changed:', val)
}
},
methods:{
changeListObjData(){
const index = Math.floor(Math.random() * 3)
const newValue = (Math.random() * 100).toFixed(2)
this.$set(this.list[index], 'value', newValue)
// 或者把对应下标的对象整个更新
// this.$set(this.list, index, { value: newValue })
}
}
}
阅读更多
$set - API — Vue.js
对于数组 - 深入响应式原理 — Vue.js
回答:
直接监听监听不到是因为你改变的是数组子元素的属性,这属于深度监听,需要加上deep: true
watch:{ list:{
handler(val){
console.log('list changed:', val)
},
deep: true
}
}
对于数组子元素的属性,这种复杂表达式,可以使用$watch的getter函数进行监听
https://cn.vuejs.org/api/comp...
this.$watch(() => this.goods_list_data[i].price_count, function(){ console.log(111)
})
以上是 有个关于vue 监听数组对象属性变化的问题想请教下大家?谢谢? 的全部内容, 来源链接: utcz.com/p/932956.html