【问题标题】:Selecting default in select option在选择选项中选择默认值
【发布时间】:2017-08-02 19:24:45
【问题描述】:

在我的 Angular 程序中,我有一个选择框,它使用 ngFor 显示许多员工,并使用 ngValuengModel 从列表中获取员工数量,并在访问时将其用作索引数组。我希望在所有选定的员工之上有一个选项。这是我尝试过的,只要选择了所有员工或其中一名员工,一切都会正常工作,但我希望默认设置为所有员工选项。我该怎么做?

HTML:

<select class="form-control" id="empName" [(ngModel)]="selectedEmployee">
    <option selected>All Employees</option>
    <option *ngFor="let emp of empInfo; let i = index" [ngValue]="i">{{emp.EmpID}} - {{emp.FirstName}} {{emp.LastName}}</option>
</select>

这是我的 ts 中的变量:

selectedEmployee: number;

我试过这两种方法:

&lt;option selected&gt;All Employees&lt;/option&gt;

&lt;option selected="selected"&gt;All Employees&lt;/option&gt;

但都不起作用。

【问题讨论】:

    标签: html angular


    【解决方案1】:

    [(ngModel)]="selectedEmployee"
    
    class MyComponent {
      selectedEmployee:number = 3;    
    

    你可以使用

     (ngModelChange)="updateSelection($event)"
    
     updateSelection(value) {
       this.model.employeeNo = value;
     }
    

    【讨论】:

    • 并且默认选项会选择为“所有员工”?
    • 对不起,我错过了那部分。使用&lt;option [ngValue]="-1"&gt;All Employees&lt;/option&gt; 并将selectedEmployee 设置为-1
    • 如何将值输入 (ngModelChange)?我只是收到一个错误,上面写着Parameter 'value' implicityly has an 'any' type
    • 这听起来不像是错误。许可以试试...(value:number) { ...
    • 你不想要 (ngModelChange)="updateSelection($event.target.value)" ???
    【解决方案2】:

    您可以删除 ngModel 并在更改时获取员工。在此示例中,所有员工始终是选定选项,您仅在选择更改时检索员工。

    <select (change)="updateEmployee($event.target.value)" >
            <option [value]="'All employees'" ></option>
            <template ngFor let-emp [ngForOf]="emplInfo" let-i="index">
              <option [value]="i" >{{emp.empId}}</option>
            </template>
        </select>
    

    【讨论】:

    • 我希望该值成为所选员工的索引
    • 不需要模板标签,如果有,&lt;ng-template&gt; 会是更好的选择
    • @asdf 我已经更新了将索引设置为值的答案。希望有帮助。是的,现在是 ng-template,仅模板已被弃用
    【解决方案3】:

    大概是这样的吧?

      <label>Employee:</label>
      <select [(ngModel)]="employee.id"
        (ngModelChange)="onSelect($event)">
          <option value="0">--Select--</option>
          <option *ngFor="#employee of employees" 
            value={{employee.id}}>{{employee.name}}</option>
    

    onSelect(value) {
     this.employee.id = value;
    }
    

    【讨论】:

    • (change)ngModel 通常是一个坏主意,因为此事件在 selectedCountry 更新之前触发,'ngModelChange) 通常是一个更好的选项
    • 感谢@GünterZöchbauer 的见解更新了相应的代码