2016-11-09 3 views
2

나는 클래스 바인딩 문 무리가 있습니다계산 된 속성은 Vuex 저장소 개체에서 업데이트되지

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

... 그리고 계산 된 재산 방법 : 여기

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

위에서 언급 된 방법의를 찾고 있습니다 :

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 '에 대해'{key : true}'를 포함하는 사전이 될 수 있습니다. 그런 다음': style = "{active : isActiveStatus [status.id]}"'를 사용할 수 있습니다. –

답변

1

알아 냈어. 함수가 끝나면 컴포넌트를 다시 렌더링하도록 강제해야합니다 :

this.$forceUpdate(); 
관련 문제