从 Angular 中的自定义表单组件访问 FormControl

2023-12-13

我的 Angular 应用程序中有一个自定义表单控制组件,它实现了ControlValueAccessor界面。

但是,我想访问FormControl实例,与我的组件关联。我正在使用反应式形式FormBuilder并使用提供表单控制formControlName属性。

那么,我如何访问FormControl来自我的自定义表单组件内部的实例?


该解决方案诞生于讨论在 Angular 存储库中。请务必阅读它,如果您对此问题感兴趣,最好参与。


我研究过的代码FormControlName指令,它启发我编写了以下解决方案:

@Component({
  selector: 'my-custom-form-component',
  templateUrl: './custom-form-component.html',
  providers: [{
    provide: NG_VALUE_ACCESSOR,
    useExisting: CustomFormComponent,
    multi: true
  }]
})
export class CustomFormComponent implements ControlValueAccessor, OnInit {

  @Input() formControlName: string;

  private control: AbstractControl;


  constructor (
    @Optional() @Host() @SkipSelf()
    private controlContainer: ControlContainer
  ) {
  }


  ngOnInit () {

    if (this.controlContainer) {
      if (this.formControlName) {
        this.control = this.controlContainer.control.get(this.formControlName);
      } else {
        console.warn('Missing FormControlName directive from host element of the component');
      }
    } else {
      console.warn('Can\'t find parent FormGroup directive');
    }

  }

}

我正在注入父级FormGroup到组件,然后获取特定的FormControl使用通过获得的控件名称从中获取formControlName捆绑。

但是,请注意,该解决方案是专门针对以下用例量身定制的:FormControlName指令用于宿主元素。在其他情况下它不会起作用。为此,您需要添加一些额外的逻辑。如果您认为这个问题应该由 Angular 解决,请务必访问讨论.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Angular 中的自定义表单组件访问 FormControl 的相关文章

随机推荐

  • 通过动作脚本关闭网络摄像头的使用

    有没有办法 如何在动作脚本中关闭网络摄像头连接 我正在通过 Camera getCamera 打开流 问题是 释放网络摄像头实例后 我尝试了很多方法 网络摄像头上的光仍然是光束 在 macbook pro 上尝试过 您只需致电video a
  • 带刻面的堆叠条的反向填充顺序

    我不知道如何反转填充顺序 基本上 我试图让指南和填充匹配单词从正到负的内在顺序 指南和填充顺序从上到下应该是 比我预期的要好得多 填充在最顶部 图例的顶部 比我预期的要好一点 关于我的预期 比我想象的差一点 比我预期的要糟糕得多 填充在最底
  • 查看SQL Server数据库对象列表时如何识别系统对象?

    我试图列出服务器上所有数据库中的所有存储过程 但我似乎无法可靠地过滤掉系统对象 我正在使用 SELECT FROM sysobjects WHERE id gt 100 这似乎在除 MSDB 之外的每个数据库中都运行良好 MSDB 充满了大
  • 如何使用经典蓝牙代替 LE

    在参照丹尼斯 马修斯的回答如何在 iOS 上指定经典蓝牙而不是 LE 是否有不同的 api核心蓝牙框架 Joels 有一种非常清晰的方法可以在 iOS 上使用经典蓝牙 它具有外部附件框架 但是 除了经典蓝牙之外 它还包括直接硬件连接 您需要
  • 有效使用 UncaughtExceptionHandler

    我最近了解了 Java 1 5 的这个功能 并开发了一个示例代码来使用它 我的目标是当线程由于未捕获的异常而死亡时重新启动线程 public class ThreadManager public static void main Strin
  • 为什么标签小部件中的文本周围出现难看的大括号? - Tkinter

    我的标签小部件中的文本周围有大括号 输出是 Total tries 0 代替Total tries 0 这是我的代码的简短版本 class Cell def check self mem tries 1 mem update tries c
  • UISearchController更新搜索结果问题

    我的问题是我已经实施了UISearchController在 Swift 3 中 当我尝试过滤它时 它很容易过滤简单数组 但我的情况有点不同 我有一个数组 我从中获取所有数据SQLite database在类中 所以它是类的数组 manag
  • 断开各个对等点与 MCSession 的连接?

    如果我有一组已连接的对等点 假设有 3 个 a gt b a gt c a gt d 我只想断开对等点 c 的连接 我应该做什么 我看到对类似问题的一个答复指出 您只能断开 您自己 与会话的连接 这意味着在上述情况下 如果我这样做 mySe
  • 在 MATLAB GUIDE 中显示大型文本文件的最佳方式是什么?

    如何使用 MATLAB GUIDE 控件在 GUI 中显示文本文件的内容 文本文件可能很长或很宽 因此它应该能够具有垂直和水平滚动条 多行编辑框可能是显示文本的最佳选择 例子 read text file lines as cell arr
  • 函数可选参数DATE类型失败

    我有一个函数可以查找下周一的日期 当没有传递可选日期参数时 它将变为默认值零 我想我已经添加了注释来解释问题 Function NextMondayFromADateOrToday Optional StartDate As Date As
  • 如何沿矩阵轴执行滚动求和?

    给定矩阵X with T行和列k T 50 H 10 k 5 X np arange T reshape T 1 np ones T k 如何执行滚动累积和X沿着行轴有滞后H Xcum np zeros T H k for t in ran
  • 如果我不“删除”会发生什么? [复制]

    这个问题在这里已经有答案了 如果我在执行期间分配一些内存但从不调用会发生什么delete程序终止 操作系统会释放我分配的所有内存并且不会 浪费 任何内存吗 或者在计算机重新启动之前我会丢失一部分内存吗 显然 我知道良好的编码实践是确保删除不
  • XSLT:多次复制对象 xml,同时递增属性和值

    我有一个如下所示的 xml 我想复制 n 次 同时递增其元素之一和属性之一 XML 输入
  • XNA 处理按键组合

    我已经阅读了一些涉及此问题的文章 但是在尝试实施一些之后 总是遇到同样的问题 快速说明 这是家庭作业 我正在使用 XNA 为我的游戏设计课程重新创建 Super Smash Brothers N64 风格 现在我有两个问题密切相关 熟悉 S
  • Maven 依赖项在 WEB-INF/lib 中不可见

    我在使我的项目基于 Maven 时遇到了这个奇怪的问题 我创建了一个新的Maven在 Eclipse 中创建项目并启用动态 Web 方面 但在运行时现在它会抛出ClassNotFoundException因为 Maven 依赖项没有复制到W
  • 子查询上的 GROUP_CONCAT 的奇怪结果

    在子查询上使用 GROUP CONCAT 时 我有一个奇怪的行为 这是我的查询 SELECT name GROUP CONCAT DISTINCT id SEPARATOR AS id FROM SELECT APN AS name GRO
  • 如何转换为模板类型?

    在 gdb 中 如果你有一个指向某个东西的指针 你可以在打印它之前对其进行转换 例如 这有效 print int 0xDEADBEEF 但是 如何打印std vector
  • 为什么 Map 不能在 chrome/node 中进行子类化?

    所以 ES 6 给我们带来了Maps 而且不会太快 为了实现我自己的邪恶目的 我希望对 Map 进行子类化 我尝试了以下操作 为了清楚起见 进行了缩写 function Foo return Map apply this slice cal
  • 添加突出显示不适用于 Elasticsearch 2.3.3 中的 has_child 查询

    当我使用 hasChildQuery 时 一切正常 但是当我添加addHighlightedField 方法 它不起作用 以下是我的代码 TermsLookupQueryBuilder terms QueryBuilders termsLo
  • 从 Angular 中的自定义表单组件访问 FormControl

    我的 Angular 应用程序中有一个自定义表单控制组件 它实现了ControlValueAccessor界面 但是 我想访问FormControl实例 与我的组件关联 我正在使用反应式形式FormBuilder并使用提供表单控制formC