【问题标题】:ng2-auto-complete default selection on reactive formng2-auto-complete 反应形式的默认选择
【发布时间】:2018-08-01 07:26:23
【问题描述】:

我在我的 Angular 5 应用程序上使用 https://www.npmjs.com/package/ng2-auto-complete,这就是我的输入的工作方式

HTML:

<input
          id="shipper"
          type="text"
          class="form-control"
          formControlName="shipper"
          auto-complete
          [source]="searchShipper.bind(this)"
          value-formatter="name"
          list-formatter="(id) name"
          (valueChanged)="onShipperSelected($event)"
          autocomplete="off"
        />

现在我需要在不使用 [(ngModel)] 的情况下选择一个默认值,因为在 Angular 6 中不推荐使用它与 formControlName 一起使用。当我使用它时它可以工作:

[(ngModel)]="defaultValue"

当我尝试使用 patchValue 设置默认值时:

const obj = {id: '1', name: 'test'};

this.form.patchValue({
  shipper: obj.toString()
});

const obj = {id: '1', name: 'test'};

this.form.patchValue({
  shipper: obj
});

它在输入字段上显示[object Object], 有什么办法可以在反应形式上解决这个问题?

【问题讨论】:

  • value-formatter="name",表示它使用了所选对象中的键'name'

标签: angular autocomplete angular-reactive-forms


【解决方案1】:

我认为你误解了value-formatter 的目的。这是来自docs 的示例:

myValueFormatter(data: any): string {
  return `(${data[id]}) ${data[value]}`;
}

如果您想定义要显示的对象属性,您应该改用display-property-name

这是工作的example

【讨论】:

  • 当我使用display-property-name 时它工作并显示默认值,但现在我提交表单时的值是name 属性,我希望提交值是对象的 id 或完整的对象本身
  • 使用 value-formatter 并重写此示例以返回您的 name 属性,例如:return data.name;
  • 我再次删除了 display-property-name 并使用: value-formatter="shipperValueFormatter" 在打字稿上我有 shipperValueFormatter(shipper: any): string { console.log('it called', shipper );返回托运人名称; },输入值又是 [object Object] 并且从不调用 shipperValueFormatter,我错过了什么吗?
  • 检查编辑的答案。我写了一个简单的例子。 display-property-namelist-formatter 的组合似乎有效。
  • 它工作了谢谢!,我在这里找到了另一个解决方案github.com/ng2-ui/auto-complete,它有一个属性 value-property-name="id" 这使得绑定 value 和 display 属性与 display 分开变得简单-property-name="name",你的解决方案也很有效!
猜你喜欢
  • 2018-07-06
  • 2019-06-28
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2018-12-19
  • 2019-10-04
  • 2017-03-06
相关资源
最近更新 更多