2016-11-09 62 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();