与功能请求相关的@angular/*包有哪些?
forms
描述
如果可能的话,将FormControlDirective标记为独立的组件会更好。这样它就可以作为其他组件的宿主指令使用。例如,我们正在使用它(有解决方法),动态渲染和绑定表单输入。
当前当指令用作宿主指令时,会出现以下错误。[ERROR] TS-992014: Host directive FormControlDirective must be standalone [plugin angular-compiler]
使用以下代码片段:
hostDirectives: [ {
directive: FormControlDirective,
inputs: [ 'formControl' ]
} ]
建议的解决方案
将FormControlDirective标记为独立组件
考虑过的替代方案
目前我们扩展了FormControlDirective,因此可以在不进行任何其他更改的情况下将其标记为独立组件。然后我们可以使用该自定义组件作为宿主指令。
import { Directive } from '@angular/core';
import { FormControlDirective } from '@angular/forms';
@Directive( {
standalone: true
} )
export class HostFormControlDirective extends FormControlDirective {
}
4条答案
按热度按时间py49o6xq1#
表单需要在元素上存在其他指令才能正常工作(具体来说是
ControlValueAccessor
指令)。这就是为什么它们不能独立使用的原因——开发者无法正确地导入和使用FormControlDirective
指令,而其他ReactiveFormsModule
指令。将
FormControlDirective
作为宿主指令是一个有趣的问题——它并不是真正设计成这样使用的,我不确定这样做能提供多少价值。作为宿主指令应用它的用途是什么?ycggw6v22#
我在这里补充一个使用案例。我们有一个指令,应用于
select
和input
,以提供自定义表单控件样式和行为。如果它能像这样使用就更好了:然后
CustomFormControlDirective
会将FormControlDirective
作为宿主指令应用。目前这是无法实现的,所以我们不得不采用rqqzpn5f3#
表单需要在元素上存在其他指令才能正常工作(特别是ControlValueAccessors)。这就是为什么它们不是独立的——开发者无法正确地独立导入和使用FormControlDirective,而是需要依赖于其他ReactiveFormsModule指令。
这听起来像是一个尚未被独立API覆盖的使用案例,对吗?
vbkedwbf4#
表单需要在元素上存在其他指令才能正常工作(具体来说是
ControlValueAccessor
指令)。这就是为什么它们不能独立使用的原因——开发者无法正确地导入和使用FormControlDirective
指令,而是需要与其他ReactiveFormsModule
指令一起使用。确实,它确实需要更多的代码来实现。例如,组件本身还需要实现
ControlValueAccessor
(可能还需要实现Validator
)。这就是为什么我添加了一个工作示例的 stackblitz。它与我们在应用程序中使用的有些相似,但规模要小得多,并且简化了。