有个关于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

回到顶部