【问题标题】:by changing a service from 'outside' angular js the watchers stop working通过从“外部”角度 js 更改服务,观察者停止工作
【发布时间】:2014-05-10 04:07:20
【问题描述】:

我正在这样做:

    angular.element('body').injector().get("myService").somevar = true

我正在其他地方抓住它:

    $scope.$watch( function () { return myService.somevar; }, function (somevar) {
        console.log(somevar)
    });

但是观察者并没有触发,即使我通过控制台检查了它实际上已经改变的值

【问题讨论】:

  • 如果您在 Angular 上下文之外更改某些内容,则需要手动调用 $apply()
  • ExpertSystem,作为答案发布,获得你应得的荣誉 :)

标签: angularjs watch


【解决方案1】:

如前所述,您需要使用$apply

$apply() 用于从外部以角度执行表达式 角度框架。 (例如来自浏览器 DOM 事件, setTimeout、XHR 或第三方库)。因为我们正在呼唤 我们需要执行适当的范围生命周期的角度框架 异常处理,执行手表。

例如:

var element = angular.element(document.querySelector('body'));
var service = element.injector().get('myService');
var scope = element.scope();

scope.$apply(function () {
  service.somevar = true;
});

演示: http://plnkr.co/edit/Iy3CiRzDdxFTwVq68JWi?p=preview

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多