此plunker在Firefox中可以解决任何控制台错误,但在Chrome中我收到消息:
formcontrol错误
<ul>
<li *ngFor="let item of data">
<label>
<input type="radio" name="radio1"
[value]="item.id"
[formControl]="childControl"
(input)="fn($event.target.value)" >
<p>{{ item.title }}</p>
</label>
</li>
</ul>
找不到具有未指定名称属性的控件
答案 0 :(得分:5)
由于您的MyChild模板中指定了[formControl]="childControl"
,因此您需要在MyChild类中指定FormControl。
export class MyChild implements ControlValueAccessor {
@Input() data: any;
out: any;
childControl = new FormControl();
fn: (value:any) => void;
validateFn: any = () => {};
constructor(private _renderer: Renderer, private _elementRef: ElementRef) {}
writeValue(value: any): void {
this._renderer.setElementProperty(this._elementRef, 'checked', value == this._elementRef.nativeElement.value);
}
registerOnChange(fn: (value: any) => void) {
this.onChange = fn;
}
registerOnTouched() {}
}
然而,在此之后,您最终会出现一个似乎无关的错误TypeError: v is not a function
答案 1 :(得分:0)
我认为您必须对输入标记使用formControlName属性,我希望它会有所帮助。