Barista: [快速过滤器] 以编程方式添加活动 [过滤器] 会导致 ExpressionChangedAfterItHasBeenCheckedError 并阻止处理程序触发

创建于 2020-07-16  ·  12评论  ·  资料来源: dynatrace-oss/barista

错误报告

当使用 DtQuickFilter 组件并将过滤器数组传入 [filters] 输入时,该组件不会像 DtFilterField 那样按要求做出反应。

应该发生什么

DtQuickFilter 组件应该对传入 [filters] 输入的过滤器做出适当的反应。 然后应该触发 (filterChanges) 事件。

目前发生了什么

DtQuickFilter 组件接受传递给 [filters] 的过滤器,但不会触发事件处理程序,并且控制台还会显示 ExpressionChangedAfterItHasBeenCheckedError。

演示

https://stackblitz.com/edit/github-mpgcfd?file=src%2Fquick-filter%2Fquick-filter-default-example%2Fquick-filter-default-example.ts

  1. 注意传递给 [filters] 输入的“fakeFilters”数组
  2. 请注意附加到 (filterChanges) 事件的“handle(event)”方法中的控制台日志
  3. 检查浏览器控制台以查看事件从未被触发,尽管虚假过滤器实际上附加到过滤器栏
  4. 请注意浏览器日志中的表达式已更改错误

谢谢!
阿诺

bug cannot reproduce has-pr

所有12条评论

@areknow感谢您提供复制示例并打开问题。
我想事件没有被触发是设计的 - 因为你已经设置了过滤器,你知道它们改变了 - 因此我们不会在设置输入后立即触发事件。 我们只在用户与组件交互时触发事件。 但在这种情况下我可能是错的@lukasholzer你肯定知道更多:)

关于 ExpressionChangedAfterChecked 错误 - 这绝对是我们需要检查的。

此时我们假设这是在 viewEngine 中运行时出现的问题。
我们试图在我们的开发和演示应用程序中重现它,但没有成功。 我们无法在 stackblitz 之外重现该问题。

@areknow您能否确认您注意到此问题的应用程序正在 viewEngine 中运行(我们知道 stackblitz 正在运行 viewEngine)?

@ffriedl89当然有道理,感谢您对事件处理程序的解释!

@gselltho我可以确认我的应用程序正在使用 viewEngine。

谢谢你们!

@tomheller我刚刚在我的应用程序中启用了 Ivy,但我仍然看到 ExpressionChangedAfterChecked 错误。 也许还有其他事情发生?

另一个有趣的更新:错误只发生在我本地。 通过我们的管道 (jenkins) 在开发中构建它后,错误在开发环境中不可见。

在本地我做了一个完整的npm ci但我仍然看到错误。 是否还有其他缓存需要清除?

谢谢!

@areknow您可以尝试使用 AOT 在本地构建应用程序吗? (提前编译)。 您可以通过将angular.jsonaot属性设置为 true 或将--aot传递给ng serve ...命令来启用此功能。

我认为这是一个 JIT(及时)编译问题——这应该是您在开发环境中看不到它的原因。

一般来说,从版本 9 开始,您应该使用 AOT 进行编译:
https://angular.io/guide/aot-compiler#choosing -a-compiler

作为记录,还有一个呼叫同步计划来进一步调查这个问题。 感谢@areknow进行设置。

@areknow您可以尝试使用 AOT 在本地构建应用程序吗? (提前编译)。 您可以通过将angular.jsonaot属性设置为 true 或将--aot传递给ng serve ...命令来启用此功能。

我认为这是一个 JIT(及时)编译问题——这应该是您在开发环境中看不到它的原因。

一般来说,从版本 9 开始,您应该使用 AOT 进行编译:
https://angular.io/guide/aot-compiler#choosing -a-compiler

@lukasholzer感谢您的回复!
我尝试将aot: true到 angular.json 中的 serve 构建配置,我还尝试将--aot标志添加到 serve 命令。 我还是在本地看到错误😅

这真的变得很奇怪。 我们也在我们的开发应用程序中尝试了ivy: on|offviewEngine: on|off所有可能排列,但我们仍然无法重现错误。 但是我们可以在 stackblitz 中看到这一点,并且对为什么会发生这种情况感到非常困惑。 我期待着我们的电话@areknow。 也许如果我们齐心协力,我们就能弄清楚这里发生了什么。

@tomheller听起来不错!

@tomheller我能够在一个新项目中重现这个问题: https :

还是很高兴在我们预定的时间见面👍

感谢@areknow,我们能够在他提供的设置中找到问题的根源。 不幸的是,我们仍然无法在存储库中的任何应用程序中重现它,这有点令人担忧。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

kaikcreator picture kaikcreator  ·  10评论

ffriedl89 picture ffriedl89  ·  8评论

samuelfahrngruber picture samuelfahrngruber  ·  13评论

ffriedl89 picture ffriedl89  ·  11评论

beeme1mr picture beeme1mr  ·  7评论