ヘッダーを持つ単純なウィンドウコンポーネントを作成しました。私のアプリは一度に1つのウィンドウしか表示しないので、私はそれを私のアプリのルートに置き、必要なときにその内容を変更するだけです。アンギュラ2のコンポーネントのコンテンツをプログラムで設定しました
アプリのさまざまな場所からウィンドウコンテンツを設定できるようにするために、コンポーネントがバインドされているサービスを作成しました。このようにして、私が必要とするどこからでもサービスのメソッドを呼び出すことができ、ウィンドウコンポーネントのプロパティを変更できます。
ただし、サービスのやり方はわかりませんが、ウィンドウのコンテンツとして表示されるコンポーネントのインスタンスを指定することです。どういうわけかプログラムによって、ウィンドウコンポーネントのng-content
を設定しますか?
私の現在の回避策は、ウィンドウのコンポーネントで指定されたすべての可能な内容を持つ、このよう*ngIf
で正しいものを選択します
<contentA *ngIf="windowService.getContent()='a'"></contentA>
<contentB *ngIf="windowService.getContent()='b'"></contentB>
<contentC *ngIf="windowService.getContent()='c'"></contentC>
それは十分に動作しますが、リストを維持するために長く困難になっています。私はまた、本当に何も関係がないこれらの他のすべてのコンポーネントと結合された私のウィンドウコンポーネントが好きではありません。さらに、それぞれの異なるコンテンツには独自の入力パラメータがあり、今度はウィンドウサービスとコンポーネントでそれらを追跡する必要があります。
私の質問は次のとおりです。私がこの種の問題を解決するかどうか分からない角度に特徴がありますか、それとも別の方法でアプローチすべきですか?
ng-content
タグをウィンドウコンポーネントに配置して、何とかそのタグを必要なものに置き換えるサービスを取得しています。または、私は窓のコンポーネントの中にrouter-outlet
を置くべきですか?私はコンテンツを変更するとナビゲーションと見なすべきではないというどちらのアプローチも気に入らない。私はすでに、このコンポーネントとは関係のないコンセントを持っています。
ありがとう、単純なケースでは、これは動作します。しかし、私の場合はすでに説明した設定がありますが、動的コンテンツを含む再利用可能な「ポップアップ」/モーダルウィンドウを表示する必要があります。あなたの例のログアウトボタンは、あなたがログアウトすることを確かめるかどうかを尋ねるモーダルウィンドウを開き、編集ボタンは同じウィンドウを開きますが、コンテンツはエディタになります。これを達成するには、AngularのDynamic Componentsを使用する必要があるようです。 – Catatafish
私は実際にはモーダルが好きではありません...特に電話でサイトを使用しようとしているとき。だから私は決してそれらを使用しません。 – DeborahK