notificationService.displayedNotifications 不在范围内。你打电话 **$scope**.$watch 毕竟。
notificationService.displayedNotifications
**$scope**.$watch
您可以将服务或仅属性添加到范围:
$scope.displayedNotifications = notificationService.displayedNotifications; $scope.watch('displayedNotifications', ...
在你的情况下,没有 notificationService.displayedNotifications 在范围上,所以它不能改变。这就是函数只运行一次的原因。
另一种方法是使用函数作为监视表达式:
$scope.$watch(function() { return notificationService.displayedNotifications.length; }, function (newValues, oldValues) {
Angular检查函数的返回值是否已更改。
作为@ShawnC。提到你也可以使用事件。在您的服务中,您发送一个通过 $rootScope.$broadcast 在你的控制器中,你收到它 $scope.$on (我不会用 $rootScope 在控制器中)。
$rootScope.$broadcast
$scope.$on
$rootScope
我能想到的最后一个选择是在你的回调中处理它。他们被称为无论如何,所以手表是一种开销。