Angular 角电压无功输入控制中不同模型和视图值的简易解法

Angular 角电压无功输入控制中不同模型和视图值的简易解法,angular,angular-material,angular-reactive-forms,Angular,Angular Material,Angular Reactive Forms,我有一个formControl,其值设置为对象,如{id:1,名称:'Ramesh'}。mat form字段中的输入字段为只读字段,其值来自数据库或从拾取列表中选择 为了显示不同的视图值,我使用如下所示的[value]绑定。当用户稍后更新控件时,它将正确显示。但是当它第一次使用保存的值初始化时,它会显示[object] 在内部,它取决于DefaultValueAccessor writeValue方法和[value]绑定的执行顺序 我想创建自定义值访问器,但似乎太多了。我通过扩展DefaultV

我有一个formControl,其值设置为对象,如{id:1,名称:'Ramesh'}。mat form字段中的输入字段为只读字段,其值来自数据库或从拾取列表中选择

为了显示不同的视图值,我使用如下所示的[value]绑定。当用户稍后更新控件时,它将正确显示。但是当它第一次使用保存的值初始化时,它会显示[object]

在内部,它取决于DefaultValueAccessor writeValue方法和[value]绑定的执行顺序


我想创建自定义值访问器,但似乎太多了。

我通过扩展DefaultValueAccessor并提供自定义writeValue方法解决了这个问题。但我觉得angular应该为定制writeValue方法提供一种方法

例如,有一个displayWith

演示:

@指示{ 选择器:输入[valueKeyAccessor], 供应商:[ { 提供:NG_值访问器, useExisting:forwardRef=>valueKeyAccessor, 多:真的 } ] } 导出类valueKeyAccessor扩展了DefaultValueAccessor{ @InputvalueKeyAccessor propToDisplay; writeValue:任何; 建造师 _渲染器:渲染器2, _elementRef:elementRef, @可选@InjectCOMPOSITION\u BUFFER\u MODE\u compositionMode:boolean { //参考签名https://github.com/angular/angular/blob/9.1.11/packages/forms/src/directives/default_value_accessor.tsL36-L156 超级渲染器、元素引用、合成模式; //覆盖writeValue this.writeValue=值=>{ value=value&&value[this.propToDisplay]; 常量规范化值= 值===未定义| |值===空?:值; super.writeValuenormalizedValue; }; } 恩戈尼特{ this.propToDisplay=this.propToDisplay | | name; } }
若它是只读输入,那个么您不需要绑定formControl指令,只需使用value属性即可enough@Chellappanவ 我的验证也是由formControl驱动的,为了使其内部mat表单字段和其他字段的样式保持一致。如果从模板中删除formControl指令,是否会影响表单验证和样式?是的。通过删除formControl,字段不会在mat form字段中突出显示为reddefault样式。没有向容器中添加错误类。