angular - Angular Ractive Forms:从自定义组件中获取验证器
问题描述
我有一个自定义输入组件,只是常规 htmlinput
标记的封面。这是一个使用示例:
<form [formGroup]="formGroup">
<my-input [title]="Some title" formControlName="name"></my-input>
</form>
相关组件包含:
formGroup: FormGroup = new FormGroup({
name: new FormControl('', Validators.required),
});
我设法使用这种方法FormControl
从组件内部访问实例,现在我想做的是在需要时在标题中添加一个星号。my-input
my-input
问题是 - 是否可以访问验证器列表以便我可以区分required
它们之间的验证器?
PS当然我可以将required
属性放在元素本身
<my-input ... required></my-input>
但我想使用反应形式。
解决方案
现在在 github 中存在同样的问题一段时间(所以看起来你大多不走运)。
https://github.com/angular/angular/issues/13461
您可以看到像下面这样的解决方案(感谢来自 github 的 mtinner),但没有任何官方信息
export const hasRequiredField = (abstractControl: AbstractControl): boolean => {
if (abstractControl.validator) {
const validator = abstractControl.validator({}as AbstractControl);
if (validator && validator.required) {
return true;
}
}
if (abstractControl['controls']) {
for (const controlName in abstractControl['controls']) {
if (abstractControl['controls'][controlName]) {
if (hasRequiredField(abstractControl['controls'][controlName])) {
return true;
}
}
}
}
return false;
};
您会看到大多数人都在尝试解决与您相同的问题。
希望这可以帮助!
推荐阅读
- google-chrome - 启动时显示无效的清单消息
- php - 对每个用户 ID 唯一的自定义字段进行 SELECT WHERE 查询
- python - xlsxwriter 单击单元格或应用功能
- node.js - 为什么我写入 MongoDB Atlas 的 Azure 函数的冷启动时间超过 70 秒?
- ios - 我想要一个用于 CoreData 的通用 fetchedResultController 来支持多个模型
- ruby-on-rails - Rails 2.2 不使用活动记录会话,即使它已定义
- scripting - 在哪里可以阅读我可以在我的 gitlab CI yml 文件中用作脚本的可用命令?
- swift - 在 Swift 4 中传递数据后的空白标签?
- python - %matplotlib qt5 运行但不生成图形
- c++ - 无法从文本文件中正确填充数组,似乎跳过第一行/关闭