微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angular – 在子组件中具有多个formControl的ControlValueAccessor

我在子组件中有多个formcontrols,如何在子组件中应用验证器,因此原始表单将变为无效.使用ControlValueAccessor实现它是理想的,但是想从简单的@input表单组开始.
@Component({
  selector: 'my-child',template: `

  <h1>Child</h1>
  <div [formGroup]="childForm">
    <input formControlName="firstName">
    <input formControlName="lastName">
  </div>
  `
})

export class Child {
  @input()
  childForm: FormGroup;
}

http://plnkr.co/edit/K1xAak4tlUKtZmOV1CAQ

我不知道为什么这个问题被投票,但我觉得它可能对其他人有帮助所以我发布了答案.
在多次尝试绑定子表单组后,我能够成功绑定值
@Component({
  selector: 'my-child',template: `

  <h1>Child</h1>
  <div [formGroup]="name">
    <input formControlName="firstName">
    <input formControlName="lastName">
  </div>
  `,providers: [
    {provide: NG_VALUE_ACCESSOR,useExisting: Child,multi: true}
  ]
})

export class Child implements ControlValueAccessor {
  name: FormGroup;
  constructor(fb: FormBuilder) {
    this.name = fb.group({
      firstName:[''],lastName: ['']
    });
  }

  writeValue(value: any) {
    if(value) {
        this.name.setValue(value);
    }
  }

  registerOnChange(fn: (value: any) => void) {
    this.name.valueChanges.subscribe(fn);
  }

  registerOnTouched() {}
}

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

原文地址:https://www.jb51.cc/angularjs/240425.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐