0

부트 스트랩 셀렉트 피커는 원래 셀렉트를 숨기고 셀렉트의 옵션으로 셀을 채우는 추가 요소를 생성합니다. 그러나 ngOptions를 사용할 때 selectpicker는 자동으로 업데이트되지 않습니다. AngularJS에서 재진입을 피하는 방법은 무엇입니까?

그래서 나는 ngOptions 수집 변화를 수신하고 더 필터링 ngOptions 적용되지 않는 경우 그것은 잘 작동 element.selectpicker()

를 호출하는 지침을 만들었습니다. 그렇지 않으면 filering 함수는 $ watch 콜백이 실행되어 selectpicker를 다시 만드는 원인이 될 때마다 새로운 배열을 반환합니다. 각도 감지 DOM이 변경되어 새로운 다이제스트주기가 무한히 반복되어 프로세스가 반복됩니다. 10 회 반복 후 예상대로 Angular가 예외를 throw합니다.

selectpicker를 만들 때 시계에서 일시적으로 구독을 취소하고 이후에 구독주기가 완료되면 다시 구독해야합니다. 가능한가?

갱신 1

Thougt 조금 더 지금 시도 할 수있는 아이디어가있다. 필터는 필터링 함수를 반환하는 팩토리를 정의하므로 캡처 된 배열을 사용하여 필터링 된 내용을 저장할 수 있습니다. 참조는 변경되지 않으므로 컬렉션 내용이 변경 될 때만 리스너가 실행됩니다.

+0

나는 이것이 당신의 질문에 대한 답이 아니라는 것을 알고있다. 그러나 당신은 항상 당신의 드롭 다운을위한 커스텀 라우트로 가서 문제를 피할 수있다. 다시, 부끄러워하지 말라. : //matterickson.me/dropdowns_selectboxes/ – Mutmatt

답변

0

는 약 일시적으로보고 중지 :

$watch 항상 AFAIK 당신에게 주시 해제 기능을 반환

또한
var stopW = $scope.$watch('data', process); 
stopW(); //anywhere 

작은 조언을. 때로는 시청할 때 '==='를 비교하고 싶지 않을 수도 있습니다.
기능을 사용하려고, 아무것도 변경 감지 : 심지어

$watch(function(){return $scope.data.list;}, process); 

또는 :

$watch(function(){return JSON.stringify($scope.data);}, process); 

완전히 배열을 무시해야 마지막으로 하나가 필터에 의해 다시 만듭니다.