【问题标题】:Trigger Angular change detection from console从控制台触发角度变化检测
【发布时间】:2017-12-03 22:45:05
【问题描述】:

在 AngularJS 中,我们可以通过获取 ng-app 元素来触发摘要循环,例如

var scope = angular.element(element).scope(); 
scope.$apply(...); 

我已经到处寻找在 Angular(4+) 中执行此操作的解决方案,但只找到了适用于应用程序的解决方案,例如 (Triggering Angular2 change detection manually)。我需要在控制台上工作的东西。

我确定我做错了,但尝试将答案应用于上述问题并没有奏效。我尝试了很多变体:

ng.probe($0).injector.view.root.ngModule.injector.get('ApplicationRef')

【问题讨论】:

标签: angular


【解决方案1】:

我通常在开发模式下这样做

ng.probe(getAllAngularRootElements()[0]).injector.get(ng.coreTokens.ApplicationRef).tick()

Angular 9 开始,你可以调用 Ivy:

ng.applyChanges(ng.getComponent($0))

$0 指向组件的元素

【讨论】:

    【解决方案2】:

    @guati 我收到一些“加载模块失败”错误(角度 7),该错误是由于路由中的一些更改而触发的,但即使我恢复了更改,错误仍然存​​在(可能是更改没有被检测到)所以我只是重新启动了开发服务器(再次为应用程序提供服务)并且它消失了。

    【讨论】:

      【解决方案3】:

      解决方案 1:
      1. 点击开发工具 Elements-Tab
      中的元素(您要在其上触发更改检测) 2.ng.probe($0).injector.get(ng.coreTokens.ApplicationRef).tick()

      解决方案 2: 触发特定组件更改检测器
      1. 点击开发工具 Elements-Tab
      中的元素(您要在其上触发更改检测) 2.ng.probe($0).componentInstance.cdRef.detectChanges()

      【讨论】:

      • ng.probe($0).componentInstance.cdRef === undefined
      • 对于解决方案 2:显然,要使用 this*,您必须从 @angular/core... 将 changeDetectorRef 注入到您的组件中...(* cdRef 是本地声明的 changeDetectorRef 实例)跨度>
      • 很好的解释老兄:)
      猜你喜欢
      • 1970-01-01
      • 2018-06-28
      • 2017-03-12
      • 2021-06-17
      • 2018-08-25
      • 1970-01-01
      • 2021-08-07
      • 2018-10-24
      相关资源
      最近更新 更多