[英]Angular, watch $scope for changes
我正在嘗試觀察一個示波器,以便每次都可以重新運行一個函數,而且按照我的想象,它似乎不起作用。
所以我只有
$scope.user = userFactory.getUser();
我的用戶被從工廠拉來
然后,在單擊功能中,我通過讓用戶單擊類似的按鈕將其更改為其他內容
$scope.swapUserTest = function(){
$scope.user = {'name' : 'new'}
}
然后,我試圖僅觀察它是否發生了變化-不僅僅是單擊鼠標,將來還會來自多種不同的事物,因此我希望對其進行監視,以便每當發生變化時函數就會觸發。 像這樣的東西:
$scope.$watch($scope.user, function() {
console.log("changed")
});
所以我以為,每當$ scope.user更改時,它就會觸發,但是似乎只在它第一次從工廠進入控制器時才觸發。 可以在這里使用一些指導。 謝謝!
您可以指定對象的屬性:
$scope.$watch('user', function(newValue, oldValue) {
// do something
});
或者您可以指定一個函數來返回您正在查看的值:
$scope.$watch(function () {
return $scope.user;
}, function(newValue, oldValue) {
// do something
});
要監視作用域的屬性,請將其設置為$ watch函數的第一個參數。 注意:觀察對象時,只有在整個對象發生變化時才調用手表,而該對象的屬性發生變化時才被調用。 例如:
$scope.user = {"username": "john", "email": "john@smith.com"};
$scope.$watch("user", function(user) {
console.log("users email now is:", user.email);
});
$timeout(function() {
$scope.user = {"username": "jack", "email": "jack@rocks.com"};
}, 1000);
$timeout(function() {
$scope.user.email = "jim@beam.com";
}, 2000);
// after one second console outputs
// jack@rocks.com
//after 2 seconds ... nothing, even though user object's email has changed.
要“深入監視”對象,請將$ watch的第三個參數設置為true。 $ watch(“ property_name”,callback_function,true);
或者,當您要觀看對象的特定屬性時,請使用
$scope.$watch("user.email", function(email) {
console.log("user.email watch called with:", email);
});
/*
outputs both
user.email watch called with: jack@rocks.com
users.js:60 user.email watch called with: jim@beam.com
*/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.