Angular“apply”更改为监视范围属性而不触发“监视”功能

时间:2017-06-20 16:46:26

标签: angularjs

在我的angular directive.js中,我为控制器的属性'appInfo'定义了范围监视:

this.scope_.$watch('ctrl.appInfo', function(newValue, oldValue) {

在测试用例中,我在范围内为appInfo设置了一个值:

scope.$apply(function() {
  scope.appInfo = [{
    language: 'English',
    name: 'AppName',
    description: 'description'
  }];
});

但是当上述应用发生时,指令中的范围监视方法不会被调用。有人可以帮助我做错了吗?我是棱角分明的新手,所以我一定是做些傻事。

2 个答案:

答案 0 :(得分:1)

您需要在已更改的数据中查看特定属性。 ataching示例我正在用间隔更改appInfo.num然后我正在申请你可以看到这里的例子。打开控制台,你会在那里看到它 http://plnkr.co/edit/XGoLmDaSVkL6cEVQnkdh?p=preview working example

它是控制器

angular.module('HelloWorldApp', [])

   .controller('HelloWorldController', function($scope) {
       setInterval(function(){

         $scope.appInfo.num = Math.floor(Math.random() * 100);
         $scope.$apply();
         }

         , 3000);

      $scope.appInfo = {
      language: 'English',
      name: 'AppName',
      description: 'description',
      num:1
  };

       $scope.$watch('appInfo.num', function(newValue, oldValue) {
          console.log($scope.appInfo);
       });
});

答案 1 :(得分:1)

您的属性绑定到范围,而不是控制器。您可以将该属性作为监视的第一个参数返回:

$scope.$watch(function() { 
    return $scope.appInfo;
  }, 
  function(newValue, oldValue) {
    console.log('watch fired');
});

See plunker