Angular - controlValueAccessor在不在表单中时,writeValue()无法更新的问题
创始人
2024-10-14 14:31:16
0

当使用Angular的controlValueAccessor时,有时会遇到在不在表单中时,writeValue()无法更新的问题。这通常是由于绑定的值没有正确更新导致的。

下面是一个解决这个问题的示例:

首先,创建一个自定义的CustomInputComponent组件,它实现了ControlValueAccessor接口:

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

@Component({
  selector: 'app-custom-input',
  templateUrl: './custom-input.component.html',
  styleUrls: ['./custom-input.component.css'],
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => CustomInputComponent),
      multi: true
    }
  ]
})
export class CustomInputComponent implements ControlValueAccessor {
  private _value: any;

  get value(): any {
    return this._value;
  }

  set value(val: any) {
    this._value = val;
    this.onChange(val);
    this.onTouched();
  }

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

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

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

  onChange: any = () => {};
  onTouched: any = () => {};
}

在上面的代码中,我们定义了一个私有的_value变量来存储绑定的值。然后我们定义了一个value的getter和setter方法,当值发生变化时,我们调用onChangeonTouched方法来通知表单控件。

接下来,在CustomInputComponent的模板文件custom-input.component.html中,我们可以使用ngModel指令来绑定值:


这样,当我们使用CustomInputComponent组件时,可以像下面这样绑定值:


注意,上面的示例中使用了ngModel指令,这需要在使用CustomInputComponent的模块中导入FormsModule模块。

通过以上的修改,CustomInputComponent组件在不在表单中时,writeValue()将能够正确地更新绑定的值。

相关内容

热门资讯

目前来看!智星德州辅助译码插件... 目前来看!智星德州辅助译码插件靠谱吗,微乐小程序自建房辅助器下载,曝光透视(有挂分析)-哔哩哔哩1、...
透视机巧!poker worl... 透视机巧!poker world辅助,WePoKer规律好像是真的有神器,9分钟教程(有挂技巧)1、...
脚本推荐!有哪些免费的wpk作... 脚本推荐!有哪些免费的wpk作必弊码,wpk辅助软件(透视)都是存在有攻略(哔哩哔哩)能透视中分为三...
脚本解密!aa poker透视... 脚本解密!aa poker透视软件,aapoker透视脚本(透视)果然真的是有神器(哔哩哔哩)1、每...
透视总结!pokeplus脚本... 透视总结!pokeplus脚本,微乐自建房脚本如何下载,解密脚本(有挂教程)-哔哩哔哩;1)poke...
透视安装!拱趴大菠萝开挂方法,... 透视安装!拱趴大菠萝开挂方法,微乐自建房免费黑科技下载,专业透视(有挂秘诀)-哔哩哔哩拱趴大菠萝开挂...
透视揭露!aapoker怎么设... 透视揭露!aapoker怎么设置提高好牌几率,aapoker怎么设置抽水(透视)一贯有app(哔哩哔...
透视有挂!wpk有作必弊吗,w... 透视有挂!wpk有作必弊吗,wpk刷入池率脚本(透视)确实存在有脚本(哔哩哔哩)1、免费辅助多个强度...
透视软件!wepoker透视脚... 透视软件!wepoker透视脚本下载,陕西微乐小程序攻略,总结透视(有挂详细)-哔哩哔哩1、每一步都...
不少玩家反映!aapoker辅... 不少玩家反映!aapoker辅助怎么用,微乐小程序免费黑科技5个玩家常用方法,专业透视(有挂教程)-...