2017-07-29 6 views
1

リーフレットマッピングAPIなどのサードパーティ製のライブラリをラップするAngular 2アプリを所有しているとします。これは独自のDOM管理です。サードパーティのライブラリからDOM要素の中にAngular 2 Componentsをレンダリングできますか?

Angularからサードパーティライブラリコンポーネントを呼び出す私は働いています。

リーフレットの例では、サードパーティライブラリによってレンダリングされた角型コンポーネント/内側/マークアップのいずれかをレンダリングしたい場合はどうしますか?

たとえば、リーフレットポップアップの内側にある角度2アプリからコンポーネントをレンダリングすることは可能ですか? http://leafletjs.com/reference-1.1.0.html#popup

一般的に、Angularの「外側」のDOM要素への参照がある場合、そのDOM要素にAngularコンポーネントを追加して管理するためのAPIがありますか?

+0

より広範な答えは次のようになり、これは、すべてのサードパーティのライブラリによって行われ、実装に依存します。開発者がカスタムテンプレートのプロビジョニングを行った場合は、新しいDOM要素を提供できます。 –

答えて

2

はい、コンポーネントを動的にインスタンス化する場合は、DOM要素をコンポーネント作成メソッドに渡すことができます。このDOM要素は、新しく作成されたコンポーネントのホストとして機能します。 しかし、変更検出を手動でトリガーする必要があります。 Angular CDKは、ポータルホストを導入することによってその問題を解決します。

@Component({ 
    selector: 'a-comp', 
    template: `<h2>I am {{name}}</h2>` 
}) 
export class AComponent { 
    name = 'A component'; 
} 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
    </div> 
    `, 
}) 
export class AppComponent { 
    name = `Angular! v${VERSION.full}`; 
    componentRef; 

    constructor(r: ComponentFactoryResolver, i: Injector) { 
     const someDOMElement = document.querySelector('.host'); 
     const f = r.resolveComponentFactory(AComponent); 
     this.componentRef = f.create(i, [], someDOMElement); 
    } 

    ngDoCheck() { 
     this.componentRef.changeDetectorRef.detectChanges(); 
    } 
} 

Here is plunker:

は、ここで基本的な例です。

あなたは記事の動的コンポーネントの詳細を読むことができます:

+0

私は多くの時間を費やして検索するので、私は自分自身でそれを見つけられなかったでしょう。ありがとうございました! –

+0

ようこそ)私が参照した記事を読んでください –

+1

これをやってみましょう。非常に役に立ち、欠けていた背景情報を私に与えています。 –

関連する問題