【问题标题】:how to $watch a change on service value without using the services scope angularjs如何在不使用服务范围 angularjs 的情况下 $watch 服务值的变化
【发布时间】:2015-02-21 23:26:40
【问题描述】:

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

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

}

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

非常感谢

【问题讨论】:

  • 可能是function controller($scope, mySvc){}?
  • 这甚至不是角度控制器的有效代码。问题不清楚,当代码无效且显示不多时也无济于事。 dragging service scope into it 是什么意思?
  • 就像我说的它的伪代码,我有什么粗略的想法。现在 $watch 正在引入整个服务范围。我怎么能工作,所以我不从控制器中的服务范围读取?

标签: javascript angularjs angularjs-scope angularjs-watch


【解决方案1】:

您可以使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 2018-02-01
    • 2013-08-27
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多