javascript - VueJs - DOM 不更新数组突变

标签 javascript arrays vue.js

我有一个模型,在模型安装后我在 ajax 成功时初始化一个数组

    var self = this;
    $.getJSON("somejson.json",
        function (data) {
            var list = [];
            list = data.list.map(function (item) {
                return { id: item.id, text: item.text };
            });

            self.selectableItems = list;
        });

我对这些项目中的每一个都有一个点击方法,可以从 selectableItems 中删除该项目

        select: function (item) {
            this.selectableItems.pop(item);
        },

selectableItems 最初呈现正确,但当我改变数组时,dom 没有更新。尽管实际数组正在被正确修改。

我通过计算属性来验证这一点,该属性返回 selectableItems 的计数。当项目被移除时,这个计数会正确更新,但 dom 仍然显示该项目。

我还注意到,当我在 ajax 中硬编码 selectableItems 的值时,一切都按预期工作!

self.selectableItems = [{ id: 1, text: "adsad"}];

我知道 vue 中数组变化的注意事项。但是我觉得我在这里缺少一些基本的东西,因为我刚刚开始探索 Vue。 有人可以指出我遗漏了什么吗?

最佳答案

Array.pop() 从数组中移除最后一项,它不接受任何参数。它只会删除您传递给它的任何参数的最后一项。

显示数组计数的计算属性作为最后一项被删除而不是您想要的项目的原因。

使用Array.splice()相反。

像这样将索引传递给您的点击方法:

<ul>
    <li v-for="(item, index) in selectableItems" @click="select(index)>{{item}}</li>
</ul>

脚本

select: function (index) {
        this.selectableItems.splice(index, 1);
    },

关于javascript - VueJs - DOM 不更新数组突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45520311/

相关文章:

javascript - Jquery滚动函数确定div是否在视口(viewport)内不起作用

javascript - 从输入中删除字符时,如何防止 keyup 事件触发两次?

javascript - 提醒数组内的数据细节

c++ - 我在 C++ 中的二维数组高斯模糊函数有什么问题?

vue.js - 在 Vue 应用程序中嵌入 GrapesJS MJML

vue.js - Vuejs 3路由器无法读取未定义的属性 'push'

javascript - 向 SockJS 连接添加 header ?

arrays - 如何使用 Django 在 HTML post 请求中发送数组

javascript - 滚动到 Vue 中模式窗口的底部

javascript - JS onclick 函数返回 true