簡體   English   中英

角度,觀察$ scope的變化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM