2013-07-23 123 views
0

試圖在這裏做一些簡單的事情。

在我的控制器:

$scope.testObject = { name : 'john' }; 

    $scope.$watch('$scope.testObject.name', function (e, n, v) { 
     console.log('reached'); 
    }); 

筆者認爲:

<input type="text" ng-model="testObject.name"/> 

文本框綁定到的TestObject的name屬性,並加載控制器時,代碼進入$手錶功能。

現在,如果我編輯文本框值,$ watch函數永遠不會被觸發。這是爲什麼 ?

我也嘗試設置$ watch的第三個參數爲true,沒有任何效果。

+0

應該'$範圍.testObject.name'在'$ watch'函數內引用? – tymeJV

+0

也許這將有助於澄清一些混淆http://docs.angularjs.org/api/ng.$ro​​otScope.Scope#$watch –

回答

4

從您的手錶中刪除$範圍。它應該閱讀:

$scope.$watch('testObject.name', function(e,n,v){ 
    console.log("reached"); 
}); 
+0

好的,這有效,謝謝。但我不明白爲什麼它在控制器初始化時工作,而不是在......之後對我沒有意義。 – Sam

1

使用此:

$scope.$watch('testObject.name', function(e,n,v){ 
    console.log("reached"); 
}); 

您還可以添加其他的觀察者是這樣的:

$scope.$watch('testObject.attr1 + testObject.attr2', function(e,n,v){ 
    console.log("reached"); 
}); 

或:

$scope.$watch('testObject', function(e,n,v){ 
    console.log("reached"); 
}, true);