2014-04-09 3 views
0

나는 높거나 낮게 검색했고, 많은 '솔루션'을 시도했으며 서비스를 제대로보기 위해 각도를 얻을 수 없습니다.

서비스 :

self = {}; // or self = this; 
self.testVar = null; 

$interval(function() { 
    self.testVar = Math.random(); 
}, 1000); 

return self; 

컨트롤러 :

$scope.testVar = myService.testVar; 
$scope.$watch('testVar', function(newVal, oldVal) { 
    console.log(newVal, oldVal); 
}) 

이 코드는 작동하지 않습니다. 각도가 서비스 업데이트를 마술처럼 다루기로되어있는 것처럼 $ broadcast 사용을 피하고 싶습니다. 모든 통찰력이 인정됩니다.


편집 : 컨트롤러 솔루션 : 사람이 행동을 설명하는 데 관심이있는 경우

$scope.$watch(
    function() { return myService.testVar }, 
    function(newVal) { 
     console.log(newVal); 
    } 
) 

, 그것은 같은 문제가 발생하는 혜택을 것입니다. 이 100ms로 $ 인터벌 타이머를 변경 추가 조사를


여전히 $ 범위. $ 시계 제안마다 1000MS 1 초의 최대 속도로 설정 콘솔 제어기 출력을 초래한다. 나는 당신이 서비스에서 $ scope.testVar을 설정 $ 브로드 캐스트 또는이 코드에서는 관찰자/콜백 메소드 대신 O_O

답변

0
$scope.testVar = myService.testVar; 
$scope.$watch('testVar', function(newVal, oldVal) { 
    console.log(newVal, oldVal); 
}) 

를 사용하는 것이 가장 좋습니다 가정합니다. 그럼 너는 그것을 보았다. 아무것도 다시 변경되지 않습니다. "솔루션"에서는 서비스에서 "실제"가치를보고 있기 때문에 작동합니다. $ broadcast 또는 observer 또는 callback을 사용할 필요가 없습니다. 서비스 값을보고 범위를 업데이트 할 때 예상대로 작동합니다.

+0

"서비스 값을보고 범위를 업데이트 할 때 예상대로 작동합니다." 그것은하지 않습니다. $ scope.watch ('myService.value', ...)와 같은 서비스 값을 직접 본다면 아무 일도 일어나지 않습니다 ... – user3516621

+0

첫 번째 매개 변수로 문자열을 전달하면 해당 값이 범위의 속성이 될 것으로 기대합니다 . 서비스의 값을 사용하려면 함수를 첫 번째 매개 변수로 전달하고 서비스 호출의 값을 반환해야합니다. – aet