[angular2]select(下拉式選單)如何設定預設選項,如何顯示value而選中的值是key

select(下拉式選單)如何設定預設選項,如何顯示value而選中的值是key

前言

官網甚少提到關於html的下拉式選單的一些做法,自己因為一些特殊的要求,所以寫篇文章記錄一下。

範例

如何給一個預設值,並且如果沒有選取的話,驗證是不通過的狀態呢?請參考下面的示例

import { Component } from '@angular/core';
import { NgForm } from "@angular/forms/src/directives";


@Component({
  selector: 'app-root',
  template: `
    <form #form1="ngForm" novalidate (submit)="submit(form1)">
    	<select name="modelValue" [(ngModel)]="modelValue" required>
    		<!--預設選項為空值-->
    		<option value="">please select</option>
    		<option *ngFor="let item of list">{{item.value}}</option>
    	</select>
    	<input type="submit" value="submit"/>
    </form>`,
})
export class AppComponent {
  modelValue = ''; //綁定ngModel的部份
  list = [ //下拉選單的值
    { key: 1, value: 'anson' },
    { key: 2, value: 'jacky' },
    { key: 3, value: 'andy' },
  ]
  constructor() {
  }

  submit(form1: NgForm) {
    console.log(form1.valid, form1.value);
  }
}

還有另一個狀況是實務上,常常都是顯示在畫面給user看到的是文字,但真正送回去db的時候,是用key的方式傳回去,不管是新增或是做另外的搜尋功能,那這又得如何做呢

  template: `
    <form #form1="ngForm" novalidate (submit)="submit(form1)">
    	<select name="modelValue" [(ngModel)]="modelValue" required>
    		<!--預設選項為空值-->
    		<option value="">please select</option>
    		<!--只要加上[value]就可以了-->
    		<option *ngFor="let item of list;trackBy:item?.key" [value]="item.key">{{item.value}}</option>
    	</select>
    	<input type="submit" value="submit"/>
    </form>`

假設我想把預設值設定在anson的話呢

import { Component } from '@angular/core';
import { NgForm } from "@angular/forms/src/directives";


@Component({
  selector: 'app-root',
  template: `
    <form #form1="ngForm" novalidate (submit)="submit(form1)">
    	<select name="modelValue" [(ngModel)]="modelValue" required>
    		<!--預設選項為空值-->
    		<option value="">please select</option>
    		<!--只要加上[value]就可以了-->
    		<option *ngFor="let item of list" [value]="item.key">{{item.value}}</option>
    	</select>
    	<input type="submit" value="submit"/>
    </form>`,
})
export class AppComponent {
  modelValue: number; //綁定ngModel的部份
  list = [ //下拉選單的值
    { key: 1, value: 'anson' },
    { key: 2, value: 'jacky' },
    { key: 3, value: 'andy' },
  ]
  title: string;
  constructor() {
    const selectedItem = this.list.filter(x => x.key === 1)[0]; //自己用filter的方式把值選給綁定的變數
    this.modelValue = selectedItem.key; //因為目前綁定的值是key,所以必須為key值哦
  }

  submit(form1: NgForm) {
    console.log(form1.valid, form1.value);
  }
}

結論

簡單紀錄一下關於下拉式選單的實作方式。