<template>
<div>
<ul>
<li v-for="(item, i) in ms" :key="i">{{item}}</li>
</ul>
<button @click="change()">点击</button>
</div>
</template> <script>
export default {
data () {
return {
ms: [1, 2, 3]
}
},
methods: {
change () {
this.ms[0] = 100
console.log(this.ms)
}
},
onLoad (params) {
this.keyword = params.keyword
}
}
</script>

  上面的代码想要实现点击按钮修改数组第一个元素的值。

  然而,实际运行后发现控制台打印的数据显示已经修改成功了,但是页面上的数据却没有更新(不是响应式的)。

  是什么原因导致的呢?我查了一下官方文档,文档中内容如下:

   Vue方法中修改数组某一项元素而不能响应式更新-LMLPHP

  文档中明确指出,vue不能检测上述数组的变动,同时文档中也指出了实现上述需求的方法:

  将 change() 函数中的代码 this.ms[0] = 100 改写为 this.set(this.ms, 0, 100)

  这样,修改数组中单个元素值的需求就实现了

05-27 14:40