【问题标题】:Angular 5 Set selected value of HTML Select ElementAngular 5设置HTML选择元素的选定值
【发布时间】:2018-10-22 10:42:04
【问题描述】:

这是我想要做的:

<select name="manager" id="manager" [(ngModel)]="property.manager" class="form-control" (change)="onChangeManager($event)" required>
  <option disabled value="">Select Manager</option>
  <option *ngFor="let manager of managers" [ngValue]="manager" [selected]="manager?.name === 'Subhan Ahmed'">
    {{manager?.name}}
  </option>
</select>

我需要的是当视图初始化时,我需要设置 manager?.name == property.manager.name 的选择值(在另一个事件上从 db 加载)。我试图放置一个默认文本Subhan Ahmed 来选择默认值,但它不起作用。

管理器在开始时加载,我从 Firestore 加载它们并在 subscribe() 期间将它们分配给变量 managers: Observable&lt;Manager&gt;;,而 property.manager 在另一个输入的更改事件之后加载。

我错过了什么吗?

【问题讨论】:

  • 您说“在另一个事件上从数据库加载”。它从数据库加载了什么?我认为这是经理名单。对吗?
  • 是的,我从 Firestore 加载管理器并将它们分配给 subscribe() 中的局部变量 managers: Observable&lt;Manager&gt;;
  • property.manager 在输入发生更改事件后加载。管理器在开始时加载。
  • 请注意property.manager[(ngModel)] 绑定到下拉列表。因此,它由列表中的选定项目设置。它不能同时绑定到另一个输入元素。
  • 没错,我只是想将选定的值更改为等于稍后加载的管理器。

标签: javascript angular angular5


【解决方案1】:

您可以通过设置property.manager 的值来选择下拉列表中的一项。假设selectedName 是您要选择的Manager 项目的名称,您可以这样做:

// Case sensitive
this.property.manager = this.managers.find(m => m.name === this.selectedName);

// Case insensitive
let selectedNameUp = this.selectedName.toUpperCase();
this.property.manager = this.managers.find(m => m.name.toUpperCase() === selectedNameUp);

以下是标记和代码的相关部分。有关演示,请参阅 this stackblitz

HTML:

<select name="manager" [(ngModel)]="property.manager" class="form-control" required>
  <option disabled [ngValue]="undefined">Select Manager</option>
  <option *ngFor="let manager of managers" [ngValue]="manager">{{manager.name}}</option>
</select>
<input type="text" [(ngModel)]="selectedName" (ngModelChange)="onNameChange($event)">

代码:

selectedName: string;

property = {
  ref_no: '',
  address: '',
  manager: undefined
};

managers = [
  { "company": "Test Company", "name": "John Doe", "id": "3oE37Fo2QxGHw52W7UHI" }, 
  { "company": "Another Company", "name": "John Brown", "id": "LRF8xAi48rRuWu0KZex3" }, 
  { "company": "XYZ", "name": "Subhan Ahmed", "id": "TqOQHbdwJdwgwD8Oej8v" }
];

onNameChange($event) {
  let selectedNameUp = this.selectedName.toUpperCase();
  this.property.manager = this.managers.find(m => m.name.toUpperCase() === selectedNameUp);
}

【讨论】:

  • 是的,它确实有一个由 Firestore 生成的 ID,我将其与数据一起快照。
  • stackblitz.com/edit/angular-coraqv 看看这个场景。在输入中输入名称并点击选项卡。选择框应显示您选择的值。
  • stackblitz.com/edit/…现在看看。
  • 我更新了我的答案,并包含了改编自你的 stackblitz。
  • 不,在我的情况下,它不起作用。我将使用更多代码更新 stackblitz。我只是错过了一些我侦察的东西。顺便说一句,你的回答真的很有帮助。当我让事情正常进行时,我会接受它作为答案,以便其他人可以使用正确的答案作为未来参考。谢谢
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多