从控制台触发角度变化检测

Posted

技术标签:

【中文标题】从控制台触发角度变化检测【英文标题】: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')

【问题讨论】:

它不起作用,因为您传递了一个字符串 'ApplicationRef' 而不是对 ApplicationRef 类的引用。您需要参考 @yurzui 显示的应用程序类 - ng.coreTokens.ApplicationRef。有关调试的更多信息,请参阅Everything you need to know about debugging Angular applications 啊我明白了。感谢您的链接。 我在这里问了同样的问题,关于常春藤:***.com/q/59191406/3694288 【参考方案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 实例)跨度> 很好的解释老兄:)

以上是关于从控制台触发角度变化检测的主要内容,如果未能解决你的问题,请参考以下文章

未在 Router.navigate() 上触发角度变化检测

使用 Cypress 触发 Angular Ivy 变化检测

typescript 处理多个手动触发的变化检测周期

Angular 2,Eventemitter 会触发变化检测吗?

在使用 phonegap 触发事件之前检测方向变化

如何检测 DataGridView CheckBox 事件变化?