問題タブ [angular2-injection]
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 2フォームに注入されたフォームコントロールを表示させる方法は?
フォーム コントロールを含むコンポーネント (@ViewChild および insert() を使用) をフォーム タグでラップするコンポーネントに動的に挿入しています (同じフォーム処理で多くの異なるフォーム テンプレートを使用できるようにするため)。
これはすべて正常に動作しますが、form.valid をチェックすると、動的に挿入されたフォーム コントロールが表示されないため、常に有効です。
フォームの ngForm ディレクティブの「再初期化」を何らかの方法でトリガーして、追加のフォーム コントロールが挿入されていることを認識できますか?
注:この問題のより良い解決策は、おそらくモデル駆動型フォームを使用することだと思いますが、今のところ、すべてをやり直すには通知が短すぎます。
親テンプレート:
子テンプレート 例:
angular - Angular 2 は、サービスを注入するために @Inject(forwardRef(...)) を使用する必要があります
アプリケーション内の 1 つのサービスに問題があります。問題は、このサービスが挿入されている場所で次のエラーが発生することです。
バレルの使用が原因でこの問題が発生する可能性があることはわかっていますが、サービスにバレルを使用していませんが、ファイルを「直接」参照しています../../core/services/config.service
。
この回答@Inject(forwardRef(...))
で示唆されているように、このサービスが注入されている場所ならどこでも使用しようとしました。私が持っている唯一の例外はAppComponent
、この場合、同じサービスを「通常どおり」注入していて、エラーが発生しないことです。
他のすべての場所で、次のようなことをしないと、上記のエラーが発生します。
forwardRef()
依存関係が注入されるが、まだ定義されていない場合に使用されるのは私の理解です。は、にインポートされたConfigService
から提供されます。コンポーネントは、または私が持っているのいずれかにあります。CoreModule
AppModule
SharedModule
FeatureModule
同じ方法でインポートおよび提供される他のすべてのサービスが「通常の方法」で注入されるのに対し、この特定のサービスが任意のコンポーネントで を必要とする理由について誰かが光を当てることができるかどうかはわかりませんforwardRef
(バー)。AppComponent
アップデート
サービスの提供方法は次のとおりです。
コアモジュール
アプリモジュール
はConfigService
から提供され、CoreModule
他の場所では提供されません。また、CoreModule
は にのみインポートされますAppModule
。アイデアは、単一のモジュールからサービスを提供することです。サービスは、他のモジュール (SharedModule
および a FeatureModule
) で宣言されているコンポーネントで使用されています。