javascript - Vue 对象属性不随 v-bind :class 改变

标签 javascript vue.js vuejs2 vue-component

我有一个看起来像这样的对象:

{
    data: [
        {
            id: 28,
            type: "blabla",
            name: "myname",
            language: "en",
            active: true
        },
        {
            id: 5,
            type: "blabla",
            name: "myname2",
            language: "fr",
            active: false
        },
        // etc
    ]
}

我已将此对象拆分成如下显示的组:

<li class="suggestion" v-for="suggestion in group">
    <a href="#" :class="{ active: suggestion.active }"></a>
</li>

我想突出显示我的结果,所以我在我的 Vue 对象上有一个 position 属性。可以更改。

我为位置属性设置了一个观察者:

position() {
    this.suggestions.forEach((suggestion, index) => {
        suggestion.active = index === this.position;
    });
}

它将使当前位置(因此当前项目处于事件状态)。当我检查对象数组及其属性时,这很好用。这些项目完美地改变了它们的 .active 属性。但是类绑定(bind)似乎没有重新评估。

这里出了什么问题?初始事件状态确实被考虑在内,我的第一个项目被高亮显示得很好。

尽管使用 Vue devtools,但对实际类的更改没有任何反应,我可以非常好地看到对象属性正在更改。

最佳答案

所以问题是如果对象是这样创建的:

object[suggestion.type].push(suggestion);

Vue 不检测对该对象的更改。它与 Vue 如何监视对象的变化有关。

为了让 Vue 能够很好地处理您创建的对象并希望响应式,您需要使用 Vue.set

Vue.set(object, suggestion.type, suggestion)

或者

this.$set(object, suggestion.type, suggestion)

关于javascript - Vue 对象属性不随 v-bind :class 改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44285300/

相关文章:

php - Vue.js/Laravel - 正确处理注销

vuejs2 - 引用错误: google is not defined VUE

javascript - 理解Vue中的 'this'关键字

javascript - 数据表服务器端脚本处理大量数据

javascript - Ag-Grid Vue js 过滤器

javascript - 我的 Carousel Materialise 不工作。我正在使用最新版本 1.0.0

javascript - Vuetify 工具栏被抽屉导航遮挡

vue.js - 如何获取文本字段的值并将其传递给 Vue.js 中的方法?

javascript - 如何选择 DOM 中具有相同类的所有元素?

javascript - 使用正则表达式突出显示文本中的链接