2016-10-10 27 views
3

私は別のコンポーネントを動的に追加するコンポーネントを構築しようとしています。例はここに私の親クラスであるとして:角2動的双方向バインディング

import { Component, ComponentRef, ViewChild, ViewContainerRef, ComponentFactoryResolver } from '@angular/core'; 

@Component({ 
    templateUrl: './app/sample-component.component.html', 
    selector: 'sample-component' 
}) 
export class SampleComponent { 

    @ViewChild('dynamicContent', { read: ViewContainerRef }) 
    protected dynamicComponentTarget: ViewContainerRef; 
    private currentComponent: ComponentRef<any>; 
    private selectedValue: any; 

    constructor(private componentResolver: ComponentFactoryResolver) { 

    } 

    private appendComponent(componentType: any) { 
     var factory = this.componentResolver.resolveComponentFactory(componentType); 
     this.currentComponent = this.dynamicComponentTarget.createComponent(factory); 
    } 
} 

sample-component.component.html:

<div #dynamicContent></div> 

これは、要素を追加すると正常に動作しますが、私は私がやるように、動的に双方向をバインドする方法について見当がつかない静的コンポーネント:[(ngModel)]="selectedValue"

答えて

4

動的に追加されたコンポーネントによるバインドはサポートされていません。

あなたが動的に追加されたコンポーネント(https://angular.io/docs/ts/latest/cookbook/component-communication.html
またはあなたが読むことができるとの通信に共有サービスを使用することができます/命令的this.currentComponent参照を使用して設定します。

private appendComponent(componentType: any) { 
    var factory = this.componentResolver.resolveComponentFactory(componentType); 
    this.currentComponent = this.dynamicComponentTarget.createComponent(factory); 
    this.currentComponent.instance.value = this.selectedValue; 
    this.currentComponent.instance.valueChange.subscribe(val => this.selectedValue = val); 
} 
+0

[OK]を、私はそれが 'ControlValueAccessorを使用する方が良いと思います'interface(しかし、私は' [(ngModel)] = "selectedValue" 'のような構造を提供するコンポーネントがこのインタフェースを埋め込んでいるかどうかはわかりません。 これは、このように使用できます。 'this.currentComponent.instance.registerOnChange(this.valueChangeHandler);' – SergeyK

+0

あなたは何を意味するのかよく分かりません。 '[(ngModel)] =" ... "'が動作するには 'ControlValueAccessor'の実装が必要ですが、それはAngular2バインディングでもあり、動的に追加されたコンポーネントではサポートされていません。 –

+0

この@GünterZöchbauerを拡張していただけますか? this.currentComponent.instance.valueは、を置き換えるために、componentTypes template: '...'の中のDOM input要素とどのように関連していますか?あなたがプランナーを共有できるなら、私は最も感謝します。 –

関連する問題