从控制台触发角度变化检测
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 变化检测