2017-04-01 12 views

Antwort

1

Ich hoffe, das ist was du willst.

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

src/dynamic-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/hallo-world-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 
    } 

    } 

}) 

Eltern

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

gleiche mit Welt-hallo-component.ts.

+0

Gibt es nach diesem Ansatz eine Möglichkeit, Vererbung für die dynamisch erstellten Komponenten zu verwenden? Zum Beispiel möchte ich eine Art Basisvorlage haben, von der die Vorlagen der dynamisch erstellten Komponenten übernommen werden können. Ist das möglich? – 7ball

Verwandte Themen