2014-11-25 2 views
1

다른 지침 템플릿 내에서 사용 (의가 B를 부르 자)는 다음과 같이 (A의 그것을 부르 자) 사물. 당신이 볼 수 있듯이

$scope.$on('carousel.keypress', function (event, data) { ... some logic and branching Array.prototype.splice.apply($scope.carouselData, [someIndex, 0].concat(newItems));

, 나는 몇 가지 회전 목마에 새로운 회전 목마 항목을 삽입하고 있습니다 : 지시어 AI에 대한 내 컨트롤러 내부

carouselData Array.prototype.splice.apply을 통해 내가 수정하는 이벤트에 후크가 색인.

<li ng-repeat="item in carouselData">

잘 작동하는 것 같군 :

회전 목마 자체는 리피터 지침이 포함되어 있습니다. 캐 러셀에 새 항목을 삽입하면 HTML 항목의 목록에 새 항목이 표시됩니다.

내가 가지고있는 문제는 carouselData을보고있는 지시문 B 내의 $watch이 새 항목을 삽입 할 때 트리거되지 않는다는 것입니다. I 메시지가 표시

$scope.$watch($attrs.items, function(value) { console.log("The elements for the carousel just changed.", value); });

번 페이지가로드 될 때의 몇 가지를 보여 주지만, 새로운 항목이 삽입 될 때 나는 아무것도 얻을 수 없다. 나는 splice 코드를 $timeout에 배치하려고 시도했으며, $scope.$apply()을 호출하여 어떤 것이나 nadda가 실행되는지 확인하려고 시도했다.

여기에 무슨 일이 일어 났는지 설명 할 수 있습니까?

다음은 문제의 JSFiddle의 : 콘솔 만에 값이 업데이트됩니다 처음으로 기록됩니다 http://jsfiddle.net/urdjrqvL/

공지 사항 Here happened있다. $timeout에서 속성 값이 업데이트되면 항목이 HTML에 표시되지만 $watch은 실행되지 않습니다.

+0

을 페이지 -에

$ 시계에 대한 자세한 내용은

및 $ watchCollection의 correpsonding 섹션을 참조 https://github.com/angular/angular를 참조하십시오. js/wiki/Understanding-Scopes, plunker 또는 fiddle을 만들 수 있다면 정확히 무슨 일이 일어나는지 볼 수 있습니다. – JoseM

+0

안녕하세요 JoseM, 문제를 시연하는 JSFiddle로 질문을 업데이트했습니다. –

답변

3

대신 $scope.$watch 일 경우, 배열을 변경할 경우에는 $scope.$watchCollection을 사용하십시오. $watch을 사용하는 경우 값 또는 참조의 변경 사항을 감시할지 여부를 지정하는 세 번째 매개 변수가 있습니다. Array.splice는 참조가 아닌 배열 내용 만 변경하므로 간단한 시계가 실행되지 않습니다. 이 그것이 당신의 범위에 문제처럼이 보인다
https://docs.angularjs.org/api/ng/type/$rootScope.Scope

+0

감사합니다. 나는 그걸 놓쳤다는 것을 믿을 수 없다. –

관련 문제