2013-06-19 112 views
32

在knockoutJS可以訂閱一個observable視圖模型性質的改變,例如,如:訂閱屬性更改

myViewModel.personName.subscribe(function(newValue) { 
    alert("The person's new name is " + newValue); 
}); 

目前我正在學習AngularJS,我在想,如果有一個相當於這在AngularJS中?我試圖尋找這個,但沒有任何運氣。

+0

這是observables將在Angular2中的工作原理https://ngforms.firebaseapp.com/#/43 – Failpunk

回答

49

scope對象在AngularJS有一個稱爲$watch關於 '觀看' 範圍屬性特殊方法。

它接受接收新模型的舊值的回調:

$scope.$watch('modelName', function(newValue, oldValue){ 
    // Do anything you like here 
}); 

回調是在初始化和每次模式的轉變。因此,它有良好的可添加額外的檢查平等這樣的:

$scope.$watch('modelName', function(newValue, oldValue){ 

    // Check if value has changes 
    if(newValue === oldValue){ 
     return; 
    } 

    // Do anything you like here 
}); 

這允許你「看」你的模型,並根據需要執行一些動作。一個額外的評論:如果你正在看一個包含一個對象的模型,你應該使用額外的第三個參數,告訴AngularJS通過對象相等而不是通過引用比較這兩個值(因爲參考不會改變,因此不觸發觀察者)是這樣的:

$scope.$watch('modelName', function(newValue, oldValue){ 
    // Do anything you like here 
}, true); // Add extra 'true' parameter to check for object equality 

您可以在AngularJS scope頁面上閱讀更多的文檔。

希望有幫助!

7

對於API的調用,並通過用戶操作或應用程序事件觸發的異步數據,你關閉你的控制器在服務功能的回調使用

$rootScope.$broadcast('updateSearch', value); 

直接利用它像好:

$scope.$on('updateSearch', function(event,value) { 
    $scope.search = value; 
});