【问题标题】:Angular, watch $scope for changesAngular,观察 $scope 的变化
【发布时间】:2015-01-29 00:43:35
【问题描述】:

我正在尝试观察一个作用域,以便每次都能重新运行一个函数,但它似乎并没有像我想象的那样工作。

所以我有

 $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() {

标签: javascript angularjs


【解决方案1】:

您可以指定对象的属性:

$scope.$watch('user', function(newValue, oldValue) {
    // do something
});

或者您可以指定一个返回您正在观看的值的函数:

$scope.$watch(function () {
    return $scope.user;
}, function(newValue, oldValue) {
    // do something
});

【讨论】:

    【解决方案2】:

    要监视范围的属性,请将其设置为 $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
    */
    

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 2012-08-05
      相关资源
      最近更新 更多