Angular Elements - Will show ExpressionChangedAfterItHasBeenCheckedError when use variable in attribute

ggazkfy8  于 5个月前  发布在  Angular
关注(0)|答案(3)|浏览(59)

🐞 bug报告

受影响的软件包

这个问题是由 @angular/elements 7.1.0 包引起的。

是否为回归?

是的,之前的版本 6.1.9 也存在这个问题。

问题描述

popup-element 是 angular element 创建的一个自定义元素。就像 angular 文档中的示例一样。https://angular.cn/guide/elements#example-a-popup-service
我是这样使用 popup-element 的:

<popup-element  [message]="'ww'"></popup-element>

在 AppComponent 的 html 中添加以下代码。

🔬 最小复现

https://github.com/wszhi/angular-element-demo

🔥 异常或错误

这个错误会在控制台显示。

ng:///AppModule/PopupComponent.ngfactory.js:8 ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'null: undefined'. Current value: 'null: ww'.
    at viewDebugError (vendor.js:47267)
    at expressionChangedAfterItHasBeenCheckedError (vendor.js:47244)
    at checkBindingNoChanges (vendor.js:47416)
    at checkNoChangesNodeInline (vendor.js:51494)
    at checkNoChangesNode (vendor.js:51467)
    at debugCheckNoChangesNode (vendor.js:52362)
    at debugCheckRenderNodeFn (vendor.js:52294)
    at Object.eval [as updateRenderer] (ng:///AppModule/PopupComponent.ngfactory.js:12)
    at Object.debugUpdateRenderer [as updateRenderer] (vendor.js:52279)
    at checkNoChangesView (vendor.js:51302)

🌍 你的环境

Angular 版本:

Angular CLI: 7.3.8
Node: 10.12.0
OS: darwin x64
Angular: 7.2.5

还有其他相关信息吗?

在 Chrome 浏览器中,版本号为 73.0.3683.103(官方构建)(64位)

siotufzp

siotufzp1#

我相信这里的问题是你在父级Component构造函数内部定义了元素(在更改检测周期的中间)。我们可能可以在下一个API中平滑处理这个问题。

y0u0uwnf

y0u0uwnf2#

有任何更新吗?我遇到了相同的问题。

dgsult0t

dgsult0t3#

请注意,这仍然是v9中的一个问题,尽管错误消息略有不同(updated StackBlitz):
ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后发生了变化。
之前的值为'@State':'closed'。当前值:'opened'。
有趣的是,只有在使用[message]="'Some message'"时才会抛出错误,而在使用message="Some message"时不会。
顺便说一下,解决方法是将customElements.define()调用移动到组件的ngOnInit()生命周期钩子中。

相关问题