问题标签 [controlvalueaccessor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
414 浏览

angular - 如何将 setValue 和 getValue 与 ion-radio 一起用作组件

我正在创建一个带有单选按钮的组件,在以反应形式使用此组件时,我需要设置和获取其值。我还需要能够选择默认收音机。解决此问题的最佳方法是什么?

我的 radio-button.component.html :

单选按钮.component.ts:

app.component.html:

app.component.ts:

我需要能够在这些方面做一些事情:

0 投票
1 回答
4043 浏览

angular - 如何使用 ControlValueAccessor 在角度 8 中默认选择垫按钮切换

我正在尝试使用 Angulars ControlValueAccessor 创建一个自定义元素。目标是一个具有三种状态的开关,真、假和空。默认情况下应该选择 Null,我尝试了其他帖子的一些解决方案,但它们没有奏效。
我尝试在 mat-button-toggle-group 中添加“value=null”,以及在 null mat-button-toggle 本身中添加“checked”属性。

HTML:

TS:

解决方案:

就我而言,我必须删除 ngModel。

问候

0 投票
1 回答
516 浏览

angular - mat-button-toggle 默认值返回 null 或 "" insted 值

我正在使用 Angulars ControlValueAccesor 创建一个自定义表单元素。我的切换组中有三个按钮,默认选择一个。当我不做任何事情提交时,表单应该从默认字段返回值。如果我以反应形式实现它并且“”从模板驱动的形式中实现,它会返回 null。
如果我选择另一个值,然后默认选择的值返回正确的值。

HTML

TS

问候

0 投票
1 回答
481 浏览

angular - Angular 反应式表单,ControlValueAccessor 与 PropertyBinding

我有一些表单组件实际上只是将一个大公式的某些部分包装成小块。我可以想象两种方法来做到这一点:一个 ControlValueAccessor 或一个简单的 PropertyBinding 将 FormControl 传递给子组件。

超级简单示例 https://stackblitz.com/edit/angular-dt6pva

核心思想:

对比

ControlValueAccessor 方式感觉更“正确”,但也更“有效”。

问题:使用更简单的 FormControl-Input-Binding 时是否有任何方面/优点/缺点?

编辑

想想这个应该设计成表单的json结构

我会定义 3 个组件:PersonForm、AdressForm、CompanyForm

我想到的优点/缺点,有人可能会添加一些我没有看到的观点:

FormControl-输入

  • ++更简单的子组件
  • --不同的使用属性(我不能重用formControl /formControlName)

控制值访问器

  • ++与所有其他输入组件的用法相同(formControlName)
  • ——“更多工作”落实
  • ??拆分一个大的表格定义。一方面,构建小型组件通常是一个好点,我可以重用表单组件。另一方面,我“松散”了可以直接发送到休息后端的数据结构的整体视图:

直到现在:不确定这是好是坏:)

感谢您的帮助

0 投票
0 回答
15 浏览

angular - Angular:将复杂的 ControlValueAccessors 添加到 FormGroup 而不将它们设置为 null

我面临与FormGroupsControlValueAccessors相关的问题。

我制作了一个根编辑器组件,其中包含一个FormGroup。在它里面,我有一些其他的组件,它们都由多个FormGroupsFormArraysFormControl组成。一个漂亮的嵌套结构。它们也都实现了ControlValueAccessor接口。

因此,我的根编辑器组件模板如下所示:

editor.component.html

编辑器控制器如下所示:

编辑器.component.ts

组件如下所示:

section-regions.component.ts

我的问题如下:如果我以这种方式将其他 FormControls 添加到editorForm,我会将它们设置为 null,从而丢失它们的内部结构(FormArray 包含包含 FormControls 的 FormGroups)。

有没有办法检索它们并告诉 Angular “按原样”使用它们?每个组件已经在初始化它们的内部结构,我不明白为什么在添加 FormControl 时需要指定一个值。

感谢任何人的帮助,我刚开始使用 Angular(来自 AngularJS),我有点迷路了!

0 投票
1 回答
548 浏览

angular - 角 MatFormControl、ControlValueAccessor

我有一个自定义组件,它是 mat-select 的包装。如何在其他组件中使用它?我正在阅读有关 formControl 和 controlValueAccessor 的信息,但我不太了解。

我的 custom.html

我的 custom.ts

我的 app.html

我的 app.ts

我不需要像我的 custmo.html 这样的东西

堆栈业务

0 投票
1 回答
275 浏览

angular - Angular 自定义表单控件 - 如果有父 ngForm 实例,如何访问它

我有一个使用 ControlValueAccessor 的自定义控件,我的控件是一个带有一堆材料输入控件的表单。

材料输入在 3 个案例中显示红色验证下划线。

  1. 控件已被触摸且无效
  2. 控件脏且无效
  3. 包含该控件的表单已提交,该控件无效

我想在我的自定义控件中模仿这种行为。我已经使用注入器来获取对 NgControl 的引用,它可以让我确定控件是否被触摸/脏并且无效。但我不知道如何以通用方式访问父 NgForm 以确定它是否已提交。

我不想将它显式传递给我的组件,我也不应该这样做,因为它也没有被显式传递给材料输入,但该控件能够确定表单是否已提交。

如何获取提交状态的父表单?

0 投票
1 回答
24 浏览

angular - ControlValueAccessor 的问题 - 触发值

我创建了一个数字选择器组件:

模板:

ts文件:

这个组件在另一个组件中的 ngFor 中使用

1-它有效,但是当我使用增加函数更改值时:-所有值的所有“get Value()”都会被触发(console.log(this.val); 在我的代码中)

2- 当我得到 ngbTooltip prono.stats value => "get Value()" for all values 也被触发!

  • 为什么 ngbTooltip 触发了我的 numberpicker 组件的“获取值”?!!!
  • 为什么当我只增加/减少一个值时会触发“获取值”?!

请帮助我改进我的代码。

硬币币22

也许,问题就在这里:

0 投票
1 回答
735 浏览

angular - Angular9 可重复使用的多自动完成芯片输入为 FormArray / ERROR TypeError: control.registerOnChange is not a function

健康)状况

表格组件- 带有行创建/编辑按钮的表格。单击这些按钮中的任何一个时,将打开带有输入字段的相同对话框组件。输入字段是一个可重复使用的多自动完成芯片组件。如果用户单击“编辑行”,则必须将给定值设置为输入字段作为 mat-chips 并保持可编辑(删除芯片或添加新的)。如果选择“创建行” - 空输入,用户可以添加新的。

问题

当我打开编辑对话框时,我确实将表中的值设置为输入字段。但有了它我得到一个错误:

错误类型错误:control.registerOnChange 不是函数

我无法理解的对话框组件和输入组件之间存在联系。我认为问题出在FormControlControlValueAccessor中。

代码

对话框.component.ts:

对话框.component.html:

input.component.html:

input.component.ts(添加):

我有几个建议下一步该去哪里,但其中任何一个都会让我远离我目前的结果。仍然:

1) 在 dialog.component.htmlformControlNameformArrayName. 如果我这样做,则不会出现错误,但我的值没有设置并且我有空白输入。
2) 在 input.component.tsmanagerControl = new FormControl()new FormArray([ ]). 然后我收到了一些(!)错误消息:

错误类型错误:control.registerOnChange 不是函数

3)要投入使用的东西registerOnChange。无法得到它。
4) 以某种方式将每个 FormControl 从 dialog.components.ts 推managers: this.fb.array(this.someInterface.managers)managerControl = new FormArray([]);
5) ???

任何意见或建议表示赞赏。
将根据需要提供任何更深入的解释、额外的代码或屏幕截图。
谢谢你。

0 投票
2 回答
811 浏览

angular - 在创建 NG_VALUE_ACCESSOR 时 forwardRef 是强制性的

我有一个自定义输入组件,它使用声明如下的提供程序实现 ControlValueAccessor。它似乎工作正常。在我可以在互联网上找到的所有教程中,只要提供 NG_VALUE_ACCESSOR,就会广泛使用 forwardRef

将以下代码发送到生产环境是否安全?