0

所以我有一个控制器来监视注入到其中的几个不同服务的变化。控制器当前正在继承每个服务的范围以 $watch 从中获取一个值。我很想找到一种方法来 $watch 那个值,而不会将整个服务范围拖入组合中。这是我的伪代码:

function controller {
    $scope.$watch(myService.value, function(newVal) {
        $scope.value = newVal;
    });

}

任何有关如何避免使用服务范围来更新控制器的指针都将不胜感激。

非常感谢

4

1 回答 1

0

您可以使用 Angular 的一个非常酷的功能。Angularjs 带有一个内置的消息系统,用于在模块/服务/工厂等之间进行通信。

在您的服务中,您可以使用

$rootScope.$broadcast('value:changed', { value: newValue });

在您的控制器中,您可以像这样捕获更改:

$scope.$on('value:changed', function(message) {
   $scope.value = message.newValue;

});

当然,要使用这种方法,您需要一种方法来知道该值何时会更改,以便您可以将其广播到控制器。

希望这有帮助!让我知道!

干杯

有关 $broadcast(和/或 $emit)的更多信息,请参阅参考: 为什么我们在 AngularJS 中使用 $rootScope.$broadcast? 官方文档:https : //docs.angularjs.org/api/ng/type/ $rootScope.Scope

于 2014-12-24T10:08:32.627 回答