【问题标题】:How to resolve value of dynamically added component in Angular 2?如何解决 Angular 2 中动态添加的组件的值?
【发布时间】:2017-02-13 08:17:54
【问题描述】:

我的模态组件包含设备信息,我在其中动态添加下面给出的 user<user.component.ts>。它已成功添加和渲染,但不知何故我无法以模态 <modal.component.ts> 获取所选用户的详细信息。

modal.component.ts

@Component({
  selector: 'modal',
  templateUrl: './modal.component.html'
})
export class ModalComponent {
    constructor(injector: Injector, 
            componentFactoryResolver: ComponentFactoryResolver) {}

    @ViewChild('userContainer', { read: ViewContainerRef }) userContainer: ViewContainerRef;
    cmp: ComponentRef<UserListComponent>;

    addComponent() {
        const factory = this.componentFactoryResolver.resolveComponentFactory(UserListComponent);
        this.cmp = this.userContainer.createComponent(factory);
    }
}

user.component.ts

@Component({
  selector: 'user',
  templateUrl: `<select [(ngModel)]="user">
           <option *ngFor="let user of users" [ngValue]="user">{{user.name}}</option>
         </select>`
})
export class UserComponent {...}

【问题讨论】:

    标签: angular typescript components


    【解决方案1】:

    使用EventEmitter 或Observable 在更改时发出值

    @Component({
      selector: 'user',
      templateUrl: `<select [(ngModel)]="user">
               <option *ngFor="let user of users" [ngValue]="user">{{user.name}}</option>
             </select>`
    })
    export class UserComponent {
        @Output() userChange:EventEmitter = new EventEmitter();
    
        private _user:any;
        get user () {
          return this._user;
        }
    
        set user(val) {
          this._user = val;
          this.userChange.emit(val);
        }
    }
    

    并订阅以下更改:

    addComponent() {
        const factory = this.componentFactoryResolver.resolveComponentFactory(UserListComponent);
        this.cmp = this.userContainer.createComponent(factory);
        this.cmp.instance.userChange.subscribe(val => console.log(val));
    }
    

    【讨论】:

    • 成功了。感谢 Gunter :) 消除了混乱。
    猜你喜欢
    • 2017-03-21
    • 2023-03-30
    • 2021-07-16
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多