为什么不是我的AngularJS $范围。$ watch在服务更改时被触发?

时间:2014-07-22 16:29:21

标签: javascript angularjs

在我的控制器中,我有: var timespanServiceFn;

timespanServiceFn = function() {
  return timespanService.getTimespan();
};

$scope.$watch(timespanServiceFn, $scope.updateVolume());

我的$scope.updateVolume()函数只有一个console.log,所以我知道我到了那里。

我的timespanService也非常简单:

myApp.service('timespanService', [
  '$http', '$q', function($http, $q) {
    var currentTimespan;
    currentTimespan = '3M';
    this.getTimespan = function() {
      return currentTimespan;
    };
    this.setTimespan = function(timespan) {
      console.log('setting timespan to', timespan);
      return currentTimespan = timespan;
    };
  }
]);

那么为什么当我改变时间跨度时,$watch不会被触发?

1 个答案:

答案 0 :(得分:1)

手表将两个函数作为参数。您必须将第二个参数作为参数传递,但您只需在其中调用它:

$scope.$watch(timespanServiceFn, $scope.updateVolume());

所以$scope.updateVolume()的return语句将传递给$watch函数而不是函数定义本身。

只需将其更改为:

$scope.$watch(timespanServiceFn, $scope.updateVolume);

<强> See demo