Angular的控件值访问器没有绑定值?
创始人
2024-10-24 06:31:39
0

问题描述: 当我们创建一个带有控件值访问器(CVA)的自定义表单控件时,我们可能会遇到一个问题:控件值访问器无法获取或设置表单上的绑定值。这意味着可能需要手动更新绑定值,这违反了我们使用CVA的初衷。

解决方案: 要解决此问题,我们可以在CVA中使用ɵbypassSanitizationTrustValue()函数。此函数将绕过Angular的安全检查器,并将值添加到控件上。这使得CVA可以捕获表单上的绑定值并自动更新它。

下面是一个示例控件值访问器:

import { Component, forwardRef, Input } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';

@Component({ selector: 'app-custom-input', template: , providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CustomInputComponent), multi: true } ] }) export class CustomInputComponent implements ControlValueAccessor { value: string;

onChange = (value: string) => {}; onTouched = () => {};

writeValue(value: string): void { this.value = value; }

registerOnChange(fn: any): void { this.onChange = fn; }

registerOnTouched(fn: any): void { this.onTouched = fn; }

setDisabledState?(isDisabled: boolean): void { throw new Error('Method not implemented.'); } }

在控件的writeValue()方法中,我们可以使用ɵbypassSanitizationTrustValue()函数绕过Angular的安全检查器并将值添加到控件上:

writeValue(value: string): void { this.value = value; this.onChange(this.value); const element = document.getElementById('custom-input'); element.value = value; const event = new Event('input', { bubbles: true }); element.dispatchEvent(event); element.dispatchEvent(new Event('change')); element['value'] = element['value'] || ''; element['value'] !== value && (element['value'] = value); element['control'] && (element['control'].setValue(value, {})); const formControlName = element.getAttribute('formControlName') || (element['parentNode'] && element['

相关内容

热门资讯

第9分钟实锤!智星德州菠萝(德... 第9分钟实锤!智星德州菠萝(德州)确实真的是有挂(详细辅助分享教程)1、这是跨平台的智星德州菠萝黑科...
第九分钟实锤!德州之星有外挂(... 第九分钟实锤!德州之星有外挂(wpk德州)一直真的是有挂(详细辅助我来教教你)1、让任何用户在无需德...
七分钟实锤!德扑之星有作弊(德... 七分钟实锤!德扑之星有作弊(德州俱乐部)真是是有挂(详细辅助必备教程)进入游戏-大厅左侧-新手福利-...
第五分钟实锤!德扑ai智能机器... 第五分钟实锤!德扑ai智能机器人(德州app)果然真的有挂(详细辅助可靠教程)德扑ai智能机器人辅助...
第二分钟实锤!德州ai人工智能... 第二分钟实锤!德州ai人工智能(德州wpk)果然存在有挂(详细辅助必备教程)1、德州ai人工智能透视...
第5分钟实锤!德扑数据软件(w... 第5分钟实锤!德扑数据软件(wpk德州)总是是真的有挂(详细辅助系统教程);1、进入游戏-大厅左侧-...
第4分钟实锤!德州ai辅助软件... 第4分钟实锤!德州ai辅助软件(德州wpk)真是是真的有挂(详细辅助技巧教程)小薇(透视辅助)致您一...
1分钟实锤!德扑之星猫腻(德州... 1分钟实锤!德扑之星猫腻(德州扑克)原来有挂(详细辅助总结教程)一、德扑之星猫腻AI软件牌型概率发牌...
第9分钟实锤!德扑ai智能(智... 第9分钟实锤!德扑ai智能(智星德州)本来真的有挂(详细辅助解密教程);1、用户打开应用后不用登录就...
第7分钟实锤!德州AI智能辅助... 第7分钟实锤!德州AI智能辅助机器人(线上wpk德州)真是存在有挂(详细辅助力荐教程);1、构建自己...