如何在不使用服务范围angularjs的情况下观察服务价值的变化

时间:2014-12-23 19:31:47

标签: javascript angularjs angularjs-scope angularjs-watch

所以我有一个控制器正在观察注入其中的几个不同服务的变化。控制器当前正在继承每个服务的范围,以便从中查看一个值。我很想找到一种方法来观察一个值而不将服务整个范围拖入混合中。这是我的伪代码:

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

}

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

非常感谢

1 个答案:

答案 0 :(得分:0)

你可以使用Angular非常酷的功能。 Angularjs带有内置的消息传递系统,用于模块/服务/工厂等之间的通信。

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

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

在您的控制器中,您可以捕捉到这样的变化:

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

});

当然,要使用这种方法,您需要一种方法来了解该值何时会发生变化,以便您可以将其广播到控制器。

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

<强>干杯

有关$ broadcast(和/或$ emit)的更多信息,请参阅 Why do we use $rootScope.$broadcast in AngularJS? 官方文档:https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope