Vue中对数组变化监听

在实际开发中,经常要对数组进行操作,最为常见的方法就是直接对数组中的某个元素进行赋值,比如下面这样的:

javascript 复制代码
<script>
    export default {
        data() {
            return {
                comments: [],
                isReply: [0, 0, 0, 0, 0]
            };
        },
        methods: {
            replyTo: function (index) {
                console.log(this.isReply);
                isReply[index] = 1
                console.log(this.isReply);
            }
        },
    };
</script>

但是虽然数组中的元素改变了,但是vue却不能监听到变化,同时引入watch来检测也是没有效果,如下所示

javascript 复制代码
<script>
    export default {
        data() {
            return {
                comments: [],
                isReply: [0, 0, 0, 0, 0]
            };
        },
      watch: {
        isReply: {
          handler(val, oldval) {

          },
          deep: true
        }
      },
        methods: {
            replyTo: function (index) {
                console.log(this.isReply);
                isReply[index] = 1
                console.log(this.isReply);
            }
        },
    };
</script>

从上述例子,发现vue是不会响应数据变化而重新去渲染页面。在vue中仅需要通过修改赋值语句的方式,即可让vue响应数组数据的变化。具体操作如下:

复制代码
// Vue.set
Vue.set(vm.items, indexOfItem, newValue)

// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

具体案例如下

复制代码
<script>
    import Comment from '../components/Comment'

    export default {
        data() {
            return {
                comments: [],
                isReply: [0, 0, 0, 0, 0]
            };
        },
        watch: {

        },
        components: {
            Comment
        },
        methods: {
            replyTo: function (index) {
				
				// 最后一个参数为我们需要改变的值
                this.isReply.splice(index, 1, 1);

                this.$set(this.isReply, index, 1);

            }
        },
    };
</script>
相关推荐
阿珊和她的猫1 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
加班是不可能的,除非双倍日工资5 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip6 小时前
vite和webpack打包结构控制
前端·javascript
excel7 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国7 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼7 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy7 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
草梅友仁7 小时前
草梅 Auth 1.4.0 发布与 ESLint v9 更新 | 2025 年第 33 周草梅周报
vue.js·github·nuxt.js
ZXT7 小时前
promise & async await总结
前端