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"
[OK]を、私はそれが 'ControlValueAccessorを使用する方が良いと思います'interface(しかし、私は' [(ngModel)] = "selectedValue" 'のような構造を提供するコンポーネントがこのインタフェースを埋め込んでいるかどうかはわかりません。 これは、このように使用できます。 'this.currentComponent.instance.registerOnChange(this.valueChangeHandler);' – SergeyK
あなたは何を意味するのかよく分かりません。 '[(ngModel)] =" ... "'が動作するには 'ControlValueAccessor'の実装が必要ですが、それはAngular2バインディングでもあり、動的に追加されたコンポーネントではサポートされていません。 –
この@GünterZöchbauerを拡張していただけますか? this.currentComponent.instance.valueは、を置き換えるために、componentTypes template: '...'の中のDOM input要素とどのように関連していますか?あなたがプランナーを共有できるなら、私は最も感謝します。 –