2016-10-05 4 views
1

페이지의 블록 집합을 확장하거나 축소하는 각도 지시문을 구현하고 있습니다. 이 지시문은 매개 변수로 "확장 가능 항목"집합을 필요로하며 모든 속성은 isExpanded 속성을 가져야합니다. 확장이 같은 모습을 축소해야Angularjs의 계산 된 배열

<expand-collapse-all expandable-items="expandableItems"></expand-collapse-all> 

블록은 :

<ul> 
    <li ng-repeat="group in groups"> 
     <block items="group.items" library="group.library"></block> 
    </li> 
</ul> 

expandableItems 배열은 다음과 같이 형성된다 :

_.forEach(groups, group => { 
    expandableItems.push(group.library); 
}); 

문제는 내 expandableItems는 "계산"해야한다는 것입니다 배열, 왜냐하면 isExpanded은 라이브러리가 아닌 그룹의 속성이며 그룹을 추가하거나 삭제할 수 있기 때문에 수동으로 업데이트하고 싶지 않습니다.일부 그룹이 추가되거나 제거 될 때마다 배열이입니다.

그룹 개체를 확장 가능하게 만들고 (그룹에 isExpanded 속성 추가) 전체 항목을 항목과 라이브러리를 개별적으로 전달하는 대신 블록 지시문에 전달하면 내 문제를 해결할 수 있습니다. 그러나 나는 그것이 지금과 같을 때 그것이 어떻게 풀릴 수 있는지 아직도 궁금하다.

저는 knockoutjs에 대해 더 잘 알고 있습니다. knockoutjs에서는 expandableItemsko.computed으로 정의하면 쉽게 달성 할 수 있음을 압니다. 나는 angularjs에서 비슷한 일을 어떻게 할 수 있는지 알 수 없다. 어떻게 든 expand-collapse-all에 함수를 전달하면 expandableItems 배열을 다시 계산할 수 있습니까? 이 일을

나는 시도했다 :

<expand-collapse-all expandable-items="getExpandableItems(groups)"></expand-collapse-all> 
페이지의 컨트롤러의 생성자에서 getExpandableItems(groups)을 정의

,하지만 난 얻을 오류 을 "오류 :. 10 $ 다이제스트() 반복에 도달 중단!"

+0

비슷한 질문이 http://stackoverflow.com/questions/18242816/bind-an-angularjs-directive-to-a-mapping-of-an-array에 있습니다. – Nat

답변

1

계산 된 배열을 캐시해야합니다. Angular가 참조 평등을 검사하고 실패한 검사로 인해 새 다이제스트 루프가 발생하므로 매번 새 배열 인스턴스를 반환 할 수 없습니다.