私は、多くの機能を備えた複雑なビューを構築しています。物事を整理するために、私はそれをいくつかのカスタムコンポーネントに分割しました。Angular2コンポーネントとそのサブコンポーネントがサービス中のngModelの単一インスタンスにアクセスするのを許可します
私はそれが働いているように、この短い説明をしようとしますが、私はそれが "正しい方法"であると想像できません。
構造:
- AppComponent(has binding to dataModel)
--LayoutComponent
---HeaderComponent
---SideMenuComponent
---MainContentComponent
Iは、データ・モデルの同じ単一のインスタンスにアクセスし、これらの構成要素の各々を与えることができる必要があります。しかし、サービスをプロバイダとして追加し、各コンポーネントのコンストラクタに追加すると、データの新しいインスタンスが生成されます。あるコンポーネントで行われた編集は、別のコンポーネントのデータに反映されません。
私がしたことは、dataModelへのコンポーネントアクセスを最上位の親に与えることでした。[(dataModel)]="dataModel"
をチェーンに渡しました。
次に、各コンポーネントにnullとして始まる変数dataModel
を追加しましたが、テンプレートを作成した後、その変数にバインドします。
これは、各コンポーネントの入力を同じフィールドdataModel.nameにバインドすることができます。これを更新すると、すべてのコンポーネントが変更を反映します。
これはきれいなやり方ではないようです。どんな助けもありがとう。
これは[コードレビュー](http://codereview.stackexchange.com/)のようなものです。また、あなたの構造だけを教えてくれるので、ほとんどのタグは適用されません。 –
rc5の前に、サービスを親コンポーネントのプロバイダに渡すだけで、そのサービスの同じインスタンスにその下のどこでもアクセスできます。 rc5からfinalまで、サービスをAppModuleに追加して、アプリケーション全体でシングルトンにすることができます。 –
@ハリーニンオク、私はそれを試していない。 AppModuleに追加すると、(datamodelservice:DataModelService)のようなサブコンポーネントのコンストラクタにそれを追加することになりますか? – Rob