所以我有一个控制器正在观察注入其中的几个不同服务的变化。控制器当前正在继承每个服务的范围,以便从中查看一个值。我很想找到一种方法来观察一个值而不将服务整个范围拖入混合中。这是我的伪代码:
function controller {
$scope.$watch(myService.value, function(newVal) {
$scope.value = newVal;
});
}
有关如何避免使用服务范围更新控制器的任何指示将不胜感激。
非常感谢
答案 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