为什么我不能观看服务中的对象。
香港专业教育学院有一个简单的变量工作,但一个对象将无法工作。
http://plnkr.co/edit/S4b2g3baS7dwQt3t8XEK?p=preview

var app = angular.module('plunker', []);

app.service('test', ['$http', '$rootScope',
            function ($http,   $rootScope) {

  var data = 0;
  var obj  = {
                "data": 0
              };

  this.add = function(){
    obj.data += 1;
    console.log('data:', obj);
  };

  this.getData     = function() { return obj; };

}]);

app.controller('TestController', ['$scope', '$rootScope', '$filter', 'test',
                          function($scope,   $rootScope,   $filter,   test) {

  //test controller
  $scope.add = function(){
    test.add();
  };
  $scope.test = test;
  $scope.$watch('test.getData()', function(newVal){
    console.log('data changes into: ', newVal)
  });
}]);

最佳答案

您需要传递true作为$ watch函数的最后一个参数,以使相等性检查为angular.equals。否则,仅检查引用相等性。

$scope.$watch('test.getData()', function(newVal){
  console.log('data changes into: ', newVal)
}, true);

重复的问题:
$watch an object

编辑

如下面所提到的,该代码包括一个不好的做法–在$scope中引用了一个服务。由于$watch也接受getter函数作为第一个参数,因此不必在范围内对其进行引用。干净的解决方案使用此函数按answer below的形式返回监视的数组。
$scope.$watch(function() { return test.getData(); } ...
要列出完整的解决方案,您还可以使用$watchCollection来解决引用相等性检查问题。

关于AngularJS监视服务对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26800783/

10-10 23:31
查看更多