p-dropdown 不会使用反应式表单手动设置值

p-dropdown doesn't setValue manually with Reactive Form

提问人:NewKey 提问时间:11/7/2023 最后编辑:NewKey 更新时间:11/8/2023 访问量:48

问:

我尝试在某些服务检索一些信息后手动设置表单,并且我需要再次将值设置回下拉列表(使用 setTimeout 进行实用性)。

旁边是一个普通的选择器,它的工作方式与我的预期一致。我对 p 下拉列表做了同样的事情,我根本不起作用。

它通过 onChange 方法检测到更改,但同样没有任何反应。

https://stackblitz.com/edit/ge9bjb?file=src%2Fapp%2Fdemo%2Fdropdown-reactive-forms-demo.ts

也许它需要一些参考才能工作?<p-dropdown>

angular-reactive-forms primeng primeng-dropdowns

评论


答:

1赞 Mouayad_Al 11/8/2023 #1

有一种解决方法可以解决此问题:

  1. 添加一个模板引用:<p-dropdown>#dd
    <p-dropdown
      #dd
      formControlName="city"
      [options]="cities"
      optionLabel="name"
      (onChange)="onChange($event)"
    ></p-dropdown>
  1. 用于阅读模板引用:@ViewChild
  @ViewChild('dd') dd:Dropdown

  1. 添加以下内容以更新模型值:SetTimeout
    setTimeout(() => {
      this.cityName?.patchValue(this.cities[1], { onlySelf: true });
      this.dd.updateModel(this.cities[1]) // add this line to update model
      console.log(this.formGroup.getRawValue().city);
      console.log(this.formGroup2.getRawValue().cityName);
    }, 2000);

这应该对你很好。

我认为这是由于下拉列表中的信号而发生的 引擎盖下的组件。modelValue

评论

0赞 NewKey 11/8/2023
它起作用了,谢谢,还在package.json中将“primeng”: “16.7.0” 升级到 “primeng”: “16.7.1” 以修复此错误