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エラーが表示されます。 多分何か他のことが起こっていますか?

もう1つの興味深い更新:エラーはローカルでのみ発生しています。 パイプライン(jenkins)を介してdevでビルドした後、エラーはdevenvに表示されません。

ローカルで完全なnpm ciが、それでもエラーが表示されます。 クリアする必要のある別のキャッシュはありますか?

ありがとう!

@areknow AOTを使用してローカルでアプリを作成してみてください。 (事前コンパイル)。 これを有効にするには、 angular.jsonaotプロパティをtrueに設定するか、 --aotng serve ...コマンドに渡します。

これはJIT(ジャストインタイム)コンパイルの問題だと思います。これが、開発環境で表示されない理由です。

一般に、バージョン9以降、コンパイルにはAOTを使用する必要があります。
https://angular.io/guide/aot-compiler#choosing -a-compiler

記録として、この問題をさらに調査するためにスケジュールされたcall-syncもあります。 これを設定してくれてありがとう@areknow

@areknow AOTを使用してローカルでアプリを作成してみてください。 (事前コンパイル)。 これを有効にするには、 angular.jsonaotプロパティをtrueに設定するか、 --aotng serve ...コマンドに渡します。

これはJIT(ジャストインタイム)コンパイルの問題だと思います。これが、開発環境で表示されない理由です。

一般に、バージョン9以降、コンパイルにはAOTを使用する必要があります。
https://angular.io/guide/aot-compiler#choosing -a-compiler

@lukasholzer返信ありがとうございます!
私はangular.jsonのserveビルド構成にaot: trueを追加しようとしました。また、serveコマンドに--aotフラグを追加しようとしました。 まだローカルでエラーが表示されます😅

これは本当に奇妙になっています。 また、開発アプリケーションでivy: on|offviewEngine: on|off可能なすべての順列でこれを試しましたが、それでもエラーを再現できませんでした。 しかし、これはstackblitzで見ることができ、なぜこれが起こっているのか非常に困惑しています。 @areknowまでお電話をお待ちしております。 頭を合わせれば、ここで何が起こっているのか理解できるかもしれません。

@tomhellerはいいですね!

@tomheller新しいプロジェクトで問題を再現することができました: https

予定の時間に会えてうれしいです👍

@areknowのおかげで、彼が提供したセットアップで問題の原因を

このページは役に立ちましたか?
0 / 5 - 0 評価