2014-06-10 4 views
0

내 페이지의 일부가 컨트롤러에 의해 처리됩니다. 전역 속성 $ scope.selected에 따라 다릅니다. 컨트롤러 시작시 및 $ scope.selected 값이 변경 될 때마다 컨트롤러를 초기화해야합니다.

.controller ('Details', ['$scope', function ($scope) { 
    function init() { 
    $scope.viewProperty = complexOperation($scope.selected); 
    } 
    $scope.$watch ('selected', init); 
    init(); 
}]) 

<span ng-if="selected.gto" ng-controller="Details"> 
    {{viewProperty}} 
</span> 

컨트롤러 초기화시 init을 호출하고 $ scope.selected를 변경합니다. 이것은 나에게 좋지 않습니다. 더 나은 해결책이 있습니까?

+1

컨트롤러 초기화시 'init()'이 시계에서 호출됩니다. 'init()'안에'console.log'를 써서 이것을 확인할 수 있습니다. 따라서 컨트롤러의 마지막'init()'문은 중복됩니다. –

+0

아니요, 사실이 아닙니다, init()에 대한 호출을 생략하면 카르마 테스트가 실패합니다. – user3725805

+0

어쩌면 테스트를 확인해야합니다 ... $ apply 또는 $ digest를 호출했는지 확인하십시오. –

답변

0

$watch()은 일반적으로 컨트롤러 대신 지시문 내에서 사용됩니다. 또한, 컨트롤러가 초기화 될 때 init()이 한 번 호출되었다고 언급 한 것처럼, $watch은 초기화 할 때 해당 청취자를 한 번 호출하므로 다음은이 연습에 관한 기사입니다. Angular JS - you probably shouldn't use $watch in your controllers.

+0

뛰어난 포인트와 링크. 내가 추가 할 수있는 것은 'ng-change'가 컨트롤러에서 변경을 나타 내기 위해 DOM에서 사용되어야한다는 것입니다 (DOM 참조가 문제가 아니더라도) – Brocco

+0

나는 링크 된 기사에서 Lenny의 의견에 동의합니다. $ watch를 사용하여 컨트롤러를 서로 분리합니다. 글로벌 컨트롤러는 속성을 설정하고 내부 컨트롤러의 함수를 호출하지 않습니다. – user3725805

+0

내가 찾고있는 것은 와 같은 것입니다. – user3725805

관련 문제