在我的控制器中,我有: 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
不会被触发?
答案 0 :(得分:1)
手表将两个函数作为参数。您必须将第二个参数作为参数传递,但您只需在其中调用它:
$scope.$watch(timespanServiceFn, $scope.updateVolume());
所以$scope.updateVolume()
的return语句将传递给$watch
函数而不是函数定义本身。
只需将其更改为:
$scope.$watch(timespanServiceFn, $scope.updateVolume);
<强> See demo 强>