Angular 2,设置默认值以选择选项

Rad*_*ina 16 javascript angular2-forms angular

我尝试为选项添加默认值.它就像一种占位符,我用这种方法来做.在纯HTML中它可以工作,但如果我尝试使用*ngForangular 2属性,它不会选择任何东西.

这是我在纯HTML中使用的代码:

  <select name="select-html" id="select-html">
    <option value="0" selected disabled>Select Language</option>
    <option value="1">HTML</option>
    <option value="2">PHP</option>
    <option value="3">Javascript</option>
  </select>
Run Code Online (Sandbox Code Playgroud)

并使用Angular模板:

 <select name="select" id="select" [(ngModel)]="selectLanguage">
    <option *ngFor="let item of selectOption" 
      [selected]="item.value==0" 
      [disabled]="item.value==0">{{item.label}}</option>
  </select>
Run Code Online (Sandbox Code Playgroud)

这堂课是

import {Component} from '@angular/core';

@Component({
  moduleId: module.id,
  selector: 'app-form-select',
  templateUrl: 'default.component.html'
})
export class DefaultComponent {
  private selectOption: any;
  constructor() {
    this.selectOption = [
      {
        id: 1,
        label: "Select Language",
        value: 0
      }, {
        id: 2,
        label: "HTML 5",
        value: 1
      }, {
        id: 3,
        label: "PHP",
        value: 2
      }, {
        id: 4,
        label: "Javascript",
        value: 3
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我想Select Language被选为默认值.它被禁用但未被选中.

如何选择它作为默认值?

实例

Gün*_*uer 22

更新

添加了4.0.0-beta.6compareWith

<select [compareWith]="compareFn"  [(ngModel)]="selectedCountries">
    <option *ngFor="let country of countries" [ngValue]="country">
        {{country.name}}
    </option>
</select>

compareFn(c1: Country, c2: Country): boolean {
   return c1 && c2 ? c1.id === c2.id : c1 === c2;
} 
Run Code Online (Sandbox Code Playgroud)

这样,分配给的实例selectedCountries不需要是相同的对象,但可以传递自定义比较函数,例如,以便能够匹配具有相同属性值的不同对象实例.

原版的

如果要将对象用作值,则需要[ngValue]在option元素上使用.

  <select name="select" id="select" [(ngModel)]="selectLanguage">
    <option *ngFor="let item of selectOption" [ngValue]="item"
      [disabled]="item.value==0">{{item.label}}</option>
  </select>
Run Code Online (Sandbox Code Playgroud)

如果selectLanguage分配了选项值,[(ngModel)]="..."则此选项将默认选中:

import {Component} from '@angular/core';

@Component({
  moduleId: module.id,
  selector: 'app-form-select',
  templateUrl: 'default.component.html'
})
export class DefaultComponent {
  private selectOption: any;
  constructor() {
    this.selectOption = [
      {
        id: 1,
        label: "Select Language",
        value: 0
      }, {
        id: 2,
        label: "HTML 5",
        value: 1
      }, {
        id: 3,
        label: "PHP",
        value: 2
      }, {
        id: 4,
        label: "Javascript",
        value: 3
      }
    ];
    this.selectLanguage = this.selectOption[0];
  }
}
Run Code Online (Sandbox Code Playgroud)


Ben*_*ker 15

我发现从selectOption数组中删除默认选项并单独指定默认的不可选选项会更好.

<select name="select" id="select" [(ngModel)]="selectLanguage">
  <option [ngValue]="undefined" disabled>Select Language</option>
  <option
         *ngFor="let item of selectOption"
         [value]="item.value"
  >
    item.label
  </option>
</select>
Run Code Online (Sandbox Code Playgroud)

  • 为什么这不是公认的答案。另一个答案非常复杂。 (2认同)

Co.*_*den 5

请尝试以下示例代码:
yourValue您要选择默认值的任何值 替换

<select  placeholder="country" >
       <option *ngFor="let country of countriesList" [ngValue]="country" [selected]="country.country_name == yourValue" >
             {{country.country_name}}
       </option>
</select>
Run Code Online (Sandbox Code Playgroud)

  • 使用ngModel时不起作用 (13认同)