2016-11-09 63 views
2

我有一堆类绑定声明:计算财产不是从Vuex存储对象更新

:class="{active: isActive('status', status.id)}" 

这里是上面提到的方法:

isActive: function (param, value) { 
    if (!this.activeFilters.hasOwnProperty(param) && value === 'all' && param !== 'type') { 
     return true; 
    } 
...etc 
} 

...和计算性能的方法看在:

activeFilters() { 
    return this.$store.state.activeFilters; 
}, 

这是在Vuex状态。

问题是,当点击具有上述类绑定的其中一个下拉列表时,这些属性不会更新。如果我导航到另一条路线然后返回,那么活动类已经应用得很好。我是否可以强制计算属性重新计算,以便该类立即应用?

我知道添加属性不会引发反应,but according to this,如果我用新鲜的物体代替物体,应保持反应性。那么这就是我在做什么:

state.activeFilters = query; 

...替换对象。我很难过。

+2

'this。$ forceUpdate();'是一种不好的做法。它甚至没有记录。我认为你做错了什么。这不是角度。你应该避免这一点。你能提供jsfidde/jsbin/codepen的完整例子吗? –

+0

我的意思是基本上所有相关的东西都在上面 - 我从一个从状态复制的本地对象派生计算的属性。当状态改变时,计算的属性不会更新,直到我重新渲染 - 或者是由我新发现的(并且如您所说的未记录的)方法,或者通过路由离开然后返回。 – daninthemix

+0

@daninthemix我认为如果可能的话,你应该找到尽可能使用计算属性的方法,而不是方法调用。方法调用AFAIK在它们的相关数据像计算道具一样变化时不会重新运行。例如,在这种情况下,'isActiveStatus'可以是一个包含'{key:true}'的字典,用于每个处于活动状态的“密钥”。然后你可以使用':style =“{active:isActiveStatus [status.id]}”'。 –

回答

1

想通了。在我的功能后,我需要这个强制组件重新渲染:

this.$forceUpdate();