有个关于vue 监听数组对象属性变化的问题想请教下大家?谢谢?

作者站长头像
站长
· 阅读数 12

我有个数组对象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)
  },
},

但是我好像不管怎么写,也监听不到变化,甚至直接监听这个数组对象也没反应,不知道是哪里有问题?

回复
1个回答
avatar
test
2024-07-20

使用 $set 去变更对象数组内的属性。

示例代码:

<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

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容