2016-04-22 10 views
1

HTTP GET経由で1つのコンポーネントにデータをロードしようとしていますが、このデータを動的にロードされた子コンポーネントで使用する必要があります。HTTPクエリを使用したAngular2 Dynamic Component Loader

ここでは、コードです:

ngOnInit(){ 
this.accountService.getPersonalInfo().subscribe(
     response => { 
      this.Account = response.json(); 

      this.dcl.loadIntoLocation(HeaderComponent, this.elementRef, 'header') 
       .then(compRef => { 
         compRef.instance.Account=this.Account; 
        } 
       ); 
     } 
     ); 
} 

子コンポーネント(HeaderComponent)で、私はこのデータを取得するためにthis.Accountを使用することができますが。これを行うより良い方法はありますか?

答えて

1

は、あなただけの祖先コンポーネント

@Component({ 
    selector: 'header-cmp', 
    ... 
}) 
class HeaderCmp { 
    constructor(private account:AccountService) { 
    this.account.someObservable.subscribe(...); // or whatever 
    } 
} 

@Component({ 
    selector: 'parent-cmp', 
    providers: [AccountService], 
    ... 
}) 
class ParentCmp { 
    constructor(private account:AccountService) { 
    // set some values 
    } 
} 

にあなたが「サービス」を提供部品を提供することができますthis.dcl.loadIntoLocation(...)が実際に実行されるコンポーネントまたはチェーンアップし、さらにいくつかの他の祖先のコンポーネントとすることができます。

+0

しかし、2つの類似したhttpクエリがあります.1つは親コンポーネントに、もう1つは子になります。両方のコンポーネントでデータ(this.Account)を使用する必要があります –

+1

角度DIはプロバイダーごとに1つのインスタンスを保持します。 'ParentCmp'はプロバイダ自体のインスタンスを取得します。 'HeaderCmp'の場合、DIは' AccountService'のプロバイダを見つけるまで上向きに見えます。その間にどこにも追加しない場合( 'ParentCmp'と' HeaderCmp'が直接の親子関係にない場合のみ)、DIは 'ParentCmp'のプロバイダを見つけて' HeaderCmp'に渡します。このようにして、両方のコンポーネントは同じ 'AccountService'インスタンスへの参照を取得します。 –

関連する問題