Angular Ivyでは、手動による変更の検出に関して具体的に何ができますか?


8

この記事では、

アイビーは、しかし、将来のためのいくつかの可能性を開きます。これで、zone.jsなしでアプリケーションを実行し、変更の検出を半手動で処理できるようになります(Reactの場合と少し似ています)。これらのAPIはすでに存在しますが、実験的なものであり、文書化されておらず、おそらく近い将来変更される予定です。

Ivyの前にzone.jsなしでアプリケーションを実行することはすでに可能であったと思います。Ivyは変更の検出を半手動で処理できますか?それらの実験的なAPIはどこにありますか?ドキュメントはありますか?Ivyは引き続きzone.jsを使用していますか?

私の目標は、変更の検出を手動でトリガーして、変更の検出を最小限に抑えることです。それを行うための最良のオプションは何ですか。具体的には、Ivyを使用する場合の最良のオプションは何ですか。

回答:


10

これはここで取り上げる大きなトピックですが、私は答えようと思います。

アイデアは、コンポーネントをモジュール内で宣言せずに実際にレンダリングすることです。

なぜ私たちはそのようなことをしたいのですか? シンプル-モジュールは単なるコンポーネントではありません。モジュールにはゾーン、プロバイダー、インジェクター、DIなどがあります。私たちの多くのモジュールはアプリケーションを表しています。また、単純なコンポーネントを作成して、それを別のコンポーネントにレンダリングしたい場合もあります。

それが引き起こす問題は何ですか? モジュールは私たちのためにゾーンを設定するものです。ゾーンは、変更検出を自動的にトリガーするゾーンです。モジュールの外でコンポーネントをレンダリングする場合、自動変更検出はありません。

そのため、Ivyを使用すると、次のようないくつかの新しいAPIを利用できます。

ɵrenderComponent() -モジュールで宣言せずにコンポーネントをレンダリングできます。

ɵdetectChanges();-変更検出を手動でトリガーするが、それは単なる関数で@angular/coreあり、DIを挿入するためにこれ以上DIは必要ありません。ChangeDetectorRef

ɵmarkDirty() -次の変更検出サイクルでチェックするコンポーネントをマークします。

ɵɵdirectiveInject() -コンストラクターを使用せずに、関数の問題でInjectionTokenを挿入します。

ɵこれらすべての新しいAPIの前にこの記号が何であるかを尋ねる場合、それらの関数はまだ実験的であり、まだ本番環境では使用しないでください。そして、それは彼らが文書化されていない理由でもあります。

あなたの質問-コンポーネントでのCDの使用を最小限にしたい場合は、それらをrenderComponent関数でレンダリングし、CDを自分で処理してください。

あなたがもっと読みたいなら、私はこのトピックについて完全なブログ投稿を書きました、たくさんのコード例を含みます。あなたはそれをここで見つけることができます-「Ivyのリリース後のリリースにおけるスタンドアロンコンポーネントの未来

私はNG-DE 2019でもそれについて講演しました-" Bye Bye NgModules "

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.