我不是在谈论ngModel的价值,而是与该模型相关的FormControl。我想要做的是为FormControl添加一个条目。
@Directive({
selector: 'input',
})
export class InputDirective implements OnInit {
constructor(private element: ElementRef) {
debugger;
}
ngOnInit() {
// how to I access the FormControl from here?
}
}
答案 0 :(得分:0)
要访问 Attribute Directive 中的输入元素的ngModel表单控件,您可以将 NgControl 注入到指令的控制器,Angular DI框架将提供最接近的表单控件实例:
@Directive({
selector: '[input-directive]',
})
export class InputDirective implements OnInit {
constructor(private control: NgControl, private el: ElementRef) { }
}
请查看此Stackblitz以获取示例。
要将表单控件提供给 Component ,您可以使用模板变量,该变量将与ngModel FormControl实例一起分配,并将其作为输入传递给组件,像这样:
<input [(ngModel)]="name" #ctrl="ngModel" required>
<example-app [name]="ctrl"></example-app>
请查看此Stackblitz以获取示例。
答案 1 :(得分:-1)
结果就像将control: NgModel
注入构造函数一样简单。
constructor(private element: ElementRef, control: NgModel) {}
编辑:完整指令:
@Directive({
selector: '[ngModel]',
})
export class InputDirective {
constructor(private element: ElementRef, ngModel: NgModel) {
const formControl = ngModel.control as FormModel;
formControl.name = this.element.nativeElement.name;
this.element.nativeElement.onblur = () => {
if (formControl) {
formControl.isBlurred = true;
}
};
}
}