問題タブ [angular-lifecycle-hooks]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular - Angular 7 - ngOnInit が呼び出されない
メインアプリのサブエリアを表すライブラリを参照するメインのAngularアプリがあります。
ライブラリで個別のルートを定義する機能が必要でした。
例えば:
- アプリにはルート パスがあります: /app
- ライブラリには子パスがあります: /library
/app/library をルーティングした後、ライブラリに保存されているコンポーネントにリダイレクトする必要があります。
遅延読み込みを使用することでそれを実現しました。メインアプリでルートの「loadChildren」プロパティを使用してルートを接続する場合にのみ機能します。
また、Angular チームによって提案された回避策を適用することを余儀なくされました node_modules にあるライブラリ パッケージからのモジュールの遅延読み込みが失敗します。これは、Angular ワークスペースまたはノード モジュール内のライブラリを遅延読み込みするためにプロキシ/ラッパー モジュールを使用することです。
とにかく、すべてが機能しました。
そして今、問題が始まります:
Angular ライフサイクル イベント (ngOnInit など) は、ライブラリのコンポーネントでは機能しません。熱心な読み込みを使用してライブラリを参照したとき (同時に、ルーティングが必要でなくなったとき)、Angular フックが正常に機能し始めました。ここで何が間違っている可能性がありますか?
それはAngularの問題ですか?アプリを適切に構成したかったので、一部の領域を別々のライブラリに分けました。ただし、すべてのコードをメイン アプリのみに移動することをあきらめて、ほぼ完了しています。
編集:
app.module でのルーティング (forRoot、遅延読み込み):
ルーティング (メイン アプリ内にある LazyWrapperModule) (forChild):
ライブラリ内のルーティング (forChild):
angular - 入力が変更されたときにディレクティブがトリガーされない
入力として言語 (または言語のセット) を受け取り、ディレクティブが追加された DOM 要素にクラスを追加するディレクティブを実装しています。
以下は、ディレクティブを使用する場所です。「languagesInView」は、@Input() を使用してこのディレクティブを使用するコンポーネントに取り込まれた文字列のリストです ...
コンポーネントに渡される languagesInView の入力が変更されると、テンプレートの [appRtlView] に渡す値が変更されることを期待しています。(補間 {{ languagesInView }} を使用して値を画面に出力すると、値が実際に変化することがわかります)
RTLView ディレクティブで ngOnInit を使用すると、「inputLanguage」フィールドへの変更が反映されません。
これを克服するために、ディレクティブで ngOnChanges を使用しています (OnChanges を実装すると、必要なことが実行されます)。
ディレクティブの初期化に changeDetectionStrategy を追加できませんでした。これにより、ディレクティブは通常 OnChanges を実装することになっていないと思いました。私のオンライン検索はあまり役に立ちませんでした。
Angular ディレクティブで ngOnChanges を実行するのは間違っていますか?
ありがとう