2017-04-01 14 views
0

子コンポーネントを動的に作成し、データを渡し、それに応じてレンダリングするコードが見つかりました。データバインディングAngular2動的に作成されたコンポーネント

http://plnkr.co/edit/wwHEZkbvKmNVF0Snr2ZB?p=preview

しかし、私はその親に子コンポーネントからのデータをバインドするかどうかはわかりません。上記のPlunkerで、私はshowNumへの双方向データバインドをしたいと思います。

答えて

1

私はこれが欲しいと思っています。

LIVE DEMO:http://plnkr.co/edit/SPbo1Cw7mDadfLK3ElEC?p=preview

のsrc /ダイナミックcomponent.ts

import 'rxjs/Rx'; 

export default class DynamicComponent { 

myData:any; 
@Input() set componentData(data: {component: any, inputs: any }) { 
    ... 
    this.myData=data; //assinging parent data object to myData object. 
    ... 
    ... 
    component.instance.showNum=this.myData.inputs.showNum   
    //component.instance.someNumber syntax allows you to pass varible to dynamically created component 

    //here, I'm using subject from rxjs and subscribing to it as below 
    component.instance.emitNumber$.subscribe(v=>{ 
     console.log('getting'+ v); 
     console.log(this.myData); 
     this.myData.inputs.showNum=v; //assigning subscribed value back to parent object 
     console.log(this.myData); 
    }); 

} 

のsrc /ハロー、ワールドcomponent.ts

import {Observable,Subject} 'rxjs/Rx'; 

@Component({ 
    selector: 'hello-world', 
    template: ` 
    ... 
    <input [(ngModel)]="showNum" (keyup)="updateValue(showNum)" type="text"> 
    `, 

    export default class HelloWorldComponent { 

    @Input() showNum:number; 
    emitNumber=new Subject<number>();   //using rxjs subject 
    emitNumber$=this.emitNumber.asObservable(); 

    updateValue(val){ 
     this.emitNumber.next(val);    //emitting value back to dyanmic component 
    } 

    } 

}) 

親世界-ハローcomponent.tsと同じ

<div *ngFor="let x of components">showNum of parent: {{x.inputs.showNum}}<br></div> 

+0

このアプローチの後、動的に作成されたコンポーネントで継承を使用する方法はありますか?たとえば、私は、動的に作成されたコンポーネントのテンプレートが継承できる、基本的なテンプレートを用意したいと思います。これは可能ですか? – 7ball

関連する問題