Forms 设置初始值以在角度4中的自定义组件内选择

Forms 设置初始值以在角度4中的自定义组件内选择,forms,angular,angular-ngmodel,Forms,Angular,Angular Ngmodel,正如您在这个plunkr()中所看到的,我有两个选择:一个选择在主组件中正常运行,另一个选择在自定义组件中继承ngModel设置 以下代码将innerNgModel链接到组件ngModel ngAfterViewInit() { //First set the valueAccessor of the outerNgModel this.ngModel.valueAccessor = this.innerNgModel.valueAccessor; //Set the innerN

正如您在这个plunkr()中所看到的,我有两个选择:一个选择在主组件中正常运行,另一个选择在自定义组件中继承ngModel设置

以下代码将innerNgModel链接到组件ngModel

ngAfterViewInit() {
  //First set the valueAccessor of the outerNgModel
  this.ngModel.valueAccessor = this.innerNgModel.valueAccessor;

  //Set the innerNgModel to the outerNgModel
  //This will copy all properties like validators, change-events etc.
  this.innerNgModel = this.ngModel;
}
它可以工作,因为名称属性由两个选项更新

但是,当第一次加载第二个选择时,没有选择


我想我遗漏了一些东西,一种用初始值初始化innerNgModel的方法。

这样做是一种奇怪的情况,但我相信要让它工作起来,他们需要实现另一个生命周期挂钩。AfterModelSet或类似的东西:)

无论如何,您可以通过简单的
setTimeout
setValue
来解决这个问题:

ngAfterViewInit() {
   this.ngModel.valueAccessor = this.innerNgModel.valueAccessor;
   this.innerNgModel = this.ngModel;
   setTimeout(() => {
      this.innerNgModel.control.setValue(this.ngModel.model);
   })
}