1
我有表单控件是这样的:进样AbstractControlDirective实例作为@ContentChild定制指令
<input formControlName="myName" dynamicDisable>
然后自定义指令:
@Directive({
selector: '[formControlName][dynamicDisable]
})
export class DynamicDisableDirective implements AfterContentInit {
@ContentChild(AbstractControlDirective) control: any;
ngAfterContentInit(): void {
console.log(this.control);
}
}
我想注入指令,所有者元素为@ ContentChild给指令。所有者元素可以是任何类型的表单控件,如简单FormControl,FormGroup甚至FormArray。 FormControlName是AbstractControlDirective的后代。为什么控制台总是记录'undefined'呢?
注:当我切换AbstractControlDirective为NgControl这样的:
@ContentChild(NgControl) control: any;
一切正常,表单控件实例被注入和记录良好。但是,这种方法只能用于简单的FormControl,而不能用于组和数组。
如果我提供像这样的AbstractControlDirective,我收到这个错误:'core.es5.js:1020错误错误:未捕获(承诺):错误:没有供应商FormGroup!' – witcher
我明白了。我想你必须使用'useMulti'。 –
其实我不确定这是否可行。该方法来自https://stackoverflow.com/questions/39366869/viewchildren-passing-multiple-components/39366891#39366891。另一种方法是注入或查询它们中的每一个(使用具体类)并检查找到哪一个。 –