2017-02-03 1 views
-2

내 서비스에서 설정 한 변수를보고 싶습니다. 변경 될 때 - 컨트롤러의 값을 변경하지만 감시 이벤트가 실행되지 않습니다.

이 내 코드입니다 :

var module = angular.module("Test", []); 
module.service("testService", TestService); 
module.controller("testController", TestController); 

function TestService() 
{ 
    var self = this; 
    self.Message = "1"; 
} 

TestController.$inject =["$scope", "testService"]; 
function TestController($scope, testService) 
{ 
    var self = this; 
    self.Message = testService.Message; 
    $scope.Message = self.Message; 

    $scope.$watch("Message", onMessageChange, true) 
    self.click = function() 
    { 
     testService.Message = "2";   
    } 

    function onMessageChange(oldVal, newVal) 
    { 
     self.Message = newVal; 
    } 
} 

이는 HTML입니다 :

<!DOCTYPE html> 
<html > 
    <head> 
     <title>Test</title> 

    <script src=".\angular.js"></script>  
    <script src=".\test.js"></script>  
    </head> 
    <body ng-app="Test"> 
    <div ng-controller="testController as ctrl"> 
    <button ng-click="ctrl.click()"> Click </button> 
    <span> Message: {{ctrl.Message}}</span> 
</div> 
    </body> 
</html> 

가 왜 작동하지? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

변화 그것을 메시지 : {{메시지}} MMK

답변

1

당신은 그런 서비스 변수를 볼 수 있습니다 :

$scope.$watch(function() { return testService.Message;}, onMessageChange, true) 

을 또한 인 oldval과 된 newval 변경해야합니다

function onMessageChange(newVal, oldVal) 
{ 
    self.Message = newVal; 
} 

이 코드는 서비스 변수를 사용자 $의 scope.Message하지보고 있었다 .

$scope.$watch("Message", onMessageChange, true) 

당신이 그런 식으로, 당신의 클릭 기능에 변수를 변경할 때 만 해고 것 :

self.click = function() 
{ 
    $scope.Message = "2";   
} 
+0

어떤 생각을 같이하는 이유 함수를 보지 않고 함수에서 testService.Message를 반환해야합니까? – Idov

+0

testService.Message를 $ scope처럼 $ watch에 전달하면 $ watch ("testService.Message", onMessageChange, true), testService.Message는 undefined를 반환하는 표현식으로 평가됩니다. – darron614

관련 문제