2017-02-03 32 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

関連する問題