2016-07-27 1 views
1

Angular 2内のGoogle Maps V3で作業しています。現在、バインドされたリンクと入力値をInfoWindowに取り込むためのソリューションを探しています。 InfoWindow要素が作成されると、それは新しいDOM要素であり、Angular 2文書によれば、アプリケーションの初期化時に存在しなかったDOM要素へのバインディングはサポートされていません。バインドされた要素を新しく作成されたDOMに挿入または挿入する方法や、バインドされた要素を含む事前に作成された要素をInfoWindowに移動する方法はありますか?Angular 2 Google Maps V3で作成したInfoWindow要素にDOMを挿入します。api

答えて

1

この場合、動的コンポーネントの作成を使用する必要があります。

import {ComponentResolver, ComponentFactory, ComponentRef, ApplicationRef, Injector} from '@angular/core'; 

export class SomeServiceOrComponent { 
    constructor(private resolver:ComponentResolver, private injector:Injector, private appRef:ApplicationRef) { 
    } 

    renderComponent() { 
    return this.resolver 
     .resolveComponent(YourDynamicComponentClass) 
     .then((factory:ComponentFactory<YourDynamicComponentClass>) => { 
      let cmpRef:ComponentRef<YourDynamicComponentClass> = 
       factory.create(this.injector, null, '.infoWindowsDOMSelector'); 
      (<any>this.appRef)._loadComponent(cmpRef); 
      return cmpRef; 
     }); 
    } 
} 

し、ちょうどあなたがそれを必要とするかどうか、このメソッドを呼び出す:ちょうどあなたがあなたのコンテンツをレンダリングする必要があるときには、知っているあなたのサービスやコンポーネント、このようななめらかにしてみてください。

(<any>this.appRef)._loadComponent(cmpRef)はRCの前のバージョンからのトリックですが、多分すぐに

+0

解決しなければならない私は、一般的に角度にかなり新しいですので、私の無知をご容赦します。この例を既存のクラスに組み込むか、SomeServiceOrComponentは動的コンテンツをレンダリングするユーティリティサービスを参照していますか? – somecallmemike

+0

ああ、私は助けてくれてありがとう。私は今、唯一のヒッチは、このメソッドを使用して、@Inputとして親から新しいコンポーネントにデータを渡す方法でしょうか? – somecallmemike

+0

これはまた購入することができます購入cmpRef.instance.inputData = data; cmpRefを作成した後。 – somecallmemike