Angular 5 设置 HTML 选择元素的选定值

Sub*_*med 5 javascript angular angular5

这是我想要做的:

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

我错过了什么吗?

Con*_*Fan 5

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

// 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);
Run Code Online (Sandbox Code Playgroud)

以下是标记和代码的相关部分。有关演示,请参阅此 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)">
Run Code Online (Sandbox Code Playgroud)

代码:

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);
}
Run Code Online (Sandbox Code Playgroud)