【问题标题】:Data binding Angular2 dynamically created components数据绑定Angular2动态创建的组件
【发布时间】:2017-08-26 12:32:52
【问题描述】:

我找到了动态创建子组件、将数据传递给它们并相应地呈现它们的代码。

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

但是,我不确定如何将数据从子组件绑定到其父组件。在我上面包含的 Plunker 中,我想将 2 路数据绑定到 showNum.. 有什么想法吗?

【问题讨论】:

    标签: angular typescript data-binding


    【解决方案1】:

    我希望这是你想要的。

    现场演示: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/hello-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
        }
    
      }
    
    })
    

    家长

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

    world-hello-component.ts 相同。

    【讨论】:

    • 按照这种方法,有没有办法在动态创建的组件上使用继承?例如,我想要某种基本模板,动态创建的组件的模板可以从其中继承。这可能吗?
    • plunker 似乎不适合我。所以我做了一个 StackBlitz 版本:angular-bo1yaw.stackblitz.io
    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 2017-05-20
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多