如何实现包含许多组件的Angular模板驱动表单?

时间:2019-03-21 05:15:00

标签: angular angular2-forms

这个问题更多地是关于最佳实践和体系结构的。 我从事的是在angular 2上编写的项目。 形式很多,所有这些形式都很大。很难在其中进行搜索。而且要支持它并不容易。

开始重构某些表格时。我将其拆分为组件列表(并且组件包含其他组件)。

但是内置验证被破坏了。这是由于角度隔离和角度波峰无法从组件输入元素获取错误列表。

互联网上的所有例子都是关于反应形式的。 我知道最好使用反应形式,但这不可能一次重写所有代码。合并两种类型的表单是不正确的。

作为解决方案,制作一个实现ValueAcessor和Validator的类,并绑定Model而不是Input变量。 然后使用NgModel注入所有子项 并订阅他们的ngModel.valueChanges。

好像控件将子级错误抛出到更高级别。

这样的问题是:在“ Angular哲学”中创建这样的控件是否正确?那么,为什么没有人不实施这种解决方案呢? (我试图找到这样的东西但没有找到。)

也许会有一些最佳实践和更正确的解决方案?

1 个答案:

答案 0 :(得分:1)

ControlValueAccessor是实现表单组件的标准方法。

它与重新激活和模板驱动的表单一起使用。

我尝试使用@Input处理这种组件,最后一团糟。组件只会拆分代码,而不会独立。

使用ControlValueAccessor,可以创建只需要模型对象的组件。然后,在任何时候需要表单组件时,您都不会只停留在一种类型的表单上(重新激活或模板驱动),而最重要的是,子组件不会驱动表单的构建方式。