微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用角度形式ControlValueAccessor和mat-autocomplete

如何解决使用角度形式ControlValueAccessor和mat-autocomplete

我有一个可能以前有人遇到过的问题。

  <input matInput required type="text" [value]="ngControl.value.name"
    [placeholder]="costCenterTranslations.company | translate" [formControl]="ngControl?.control"
    [matAutocomplete]="companyAutoComplete" (input)="onChanged($event.target.value)"
    (blur)="onTouched($event.target.value)" />
  <mat-autocomplete #companyAutoComplete="matAutocomplete" (optionSelected)="onChanged($event.option.value)"
    [displayWith]="displayFn.bind(this)">
    <mat-option *ngFor="let company of companies$ | async" [value]="company">
      <span>{{ company.name }}</span>
    </mat-option>
  </mat-autocomplete>
constructor(
    private readonly _translation: TranslationService<Translations>,@Optional() @Self() public ngControl: NgControl,) {
    if (this.ngControl != null) {
      // Setting the value accessor directly (instead of using the providers) to avoid running into a circular import.
      this.ngControl.valueAccessor = this;
    }
  }

  onTouched = (_value?: any) => {
    console.log('onTouched',_value);

  };
  onChanged = (_value?: any) => {
    console.log('onChanged',_value);
  }

  writeValue(company: Company): void {
    this.ngControl.control?.setValue(company);
  }

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

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

  displayFn(company?: Company) {
    console.log('displayFn:',company && company ? company.name : '');
    return company && company ? company.name : '';
  }

所以问题是我希望控件仅传递company.id ..但没有触发registerOn *函数。因此整个对象都传递了。关于为什么的想法?

解决方法

displayWith将映射到control.value,因此它需要返回公司ID。

然后将company.name用作输入值<mat-option [value]="company.name">

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?