각도 2 드롭 다운 옵션
Angular 1에서 다음을 사용하여 드롭 다운 상자의 기본 옵션을 선택할 수 있습니다.
<select
data-ng-model="carSelection"
data-ng-options = "x.make for x in cars" data-ng-selected="$first">
</select>
Angular 2는 다음이 있습니다.
<select class="form-control" [(ngModel)]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
옵션 데이터가 주어지면 기본 옵션을 어떻게 선택할 수 있습니까?
[{name: 'arm'}, {name: 'back'}, {name:'leg'}]
그리고 내가 설정으로 설정하는 내 값은 back
?
다음 selected
과 같이 속성에 바인딩을 추가하십시오 .
<option *ngFor="#workout of workouts" [selected]="workout.name == 'back'">{{workout.name}}</option>
을 할당 기본값 selectedWorkout
하고 사용하면 [ngValue]
(객체를 값으로 사용할 수 있습니다 - 그렇지 않으면 문자열 만 지원됩니다) 원하는대로해야합니다.
<select class="form-control" name="sel"
[(ngModel)]="selectedWorkout"
(ngModelChange)="updateWorkout($event)">
<option *ngFor="let workout of workouts" [ngValue]="workout">
{{workout.name}}
</option>
</select>
할당 한 값이에 사용 된 값 selectedWorkout
과 동일한 인스턴스 인지 확인하십시오 workouts
. 동일한 속성과 값을 가진 객체는 인식되지 않습니다. 개체 ID 만 확인합니다.
최신 정보
에 대한 앵귤러 추가 지원으로 compareWith
사용시 자주 사용하기 쉽게 수 있습니다 [ngValue]
(객체 값의 경우).
문서에서 https://angular.io/api/forms/SelectControlValueAccessor
<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; }
이 방법으로 다른 (새) 인스턴스를 기본값 object-으로 설정할 수 있으며 속성이 동일한 compareFn
경우 동일한 것으로 간주 해야하는지 파악하는 데 사용됩니다 id
.
모델의 값을 원하는대로 설정하십시오.
selectedWorkout = 'back'
angular2 에서 원하는 동작을 얻는 다양한 방법을 보여주기 위해 @Douglas의 plnkr 포크를 만들었습니다 .
선택 목록의 o 위치 에이 코드를 추가하십시오.
<option [ngValue]="undefined" selected>Select</option>
이 방법으로 접근 할 수 있습니다.
<option *ngFor="let workout of workouts" [value]="workout.name">{{workout.name}}</option>
또는 이런 식으로 :
<option *ngFor="let workout of workouts" [attr.value]="workout.name" [attr.selected]="workout.name == 'leg' ? true : null">{{workout.name}}</option>
또는 다음과 같이 무덤에서 수 있습니다.
<option [value]="null">Please Select</option>
<option *ngFor="let workout of workouts" [value]="workout.name">{{workout.name}}</option>
또는
<option [value]="0">Please Select</option>
<option *ngFor="let workout of workouts" [value]="workout.name">{{workout.name}}</option>
색인을 사용하여 첫 번째 값을 표시으로 표시
<option *ngFor="let workout of workouts; #i = index" [selected]="i == 0">{{workout.name}}</option>
https://angular.io/api/forms/SelectControlValueAccessor 에 따르면 다음이 필요합니다.
theView.html :
<select [compareWith]="compareFn" [(ngModel)]="selectedCountries">
<option *ngFor="let country of countries" [ngValue]="country">
{{country.name}}
</option>
</select>
theComponent.ts
import { SelectControlValueAccessor } from '@angular/forms';
compareFn(c1: Country, c2: Country): boolean {
return c1 && c2 ? c1.id === c2.id : c1 === c2;
}
이것으로 조금 어려움을 겪습니다. ... 아마 누군가를 도울 것입니다.
HTML 템플릿 :
<select (change)="onValueChanged($event.target)">
<option *ngFor="let option of uifOptions" [value]="option.value" [selected]="option == uifSelected ? true : false">{{option.text}}</option>
</select>
구성 요소 :
import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
export class UifDropdownComponent implements OnInit {
@Input() uifOptions: {value: string, text: string}[];
@Input() uifSelectedValue: string = '';
@Output() uifSelectedValueChange:EventEmitter<string> = new EventEmitter<string>();
uifSelected: {value: string, text: string} = {'value':'', 'text':''};
constructor() { }
onValueChanged(target: HTMLSelectElement):void {
this.uifSelectedValue = target.value;
this.uifSelectedValueChange.emit(this.uifSelectedValue);
}
ngOnInit() {
this.uifSelected = this.uifOptions.filter(o => o.value ==
this.uifSelectedValue)[0];
}
}
[ngModel]
대신 사용할 수 [(ngModel)]
있고 괜찮습니다.
<select class="form-control" **[ngModel]="selectedWorkout"** (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
위와 같이 할 수 있습니다. :
<select class="form-control"
[(ngModel)]="selectedWorkout"
(ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts;
let itemIndex = index"
[attr.selected]="itemIndex == 0">
{{workout.name}}
</option>
</select>
반복 옵션의 선택 속성은 목록의 반복 루프 색인을 검사 할 설정합니다. [attr. <html 속성 이름>]은 angular2에서 html 속성을 설정하는 데 사용됩니다.
typescript 파일의 모델 값을 다음과 같이 설정하는 것입니다.
this.selectedWorkout = this.workouts.length > 0
? this.workouts[0].name
: 'No data found';//'arm'
Angular2 빠른 시작에서 작동하는 것이 작동합니다.
DOM 기본값을 설정하려면과 함께 의 속성에 *ngFor
조건문을 사용하십시오 .<option>
selected
Control
의 기본값 을 설정하려면 생성자 인수를 사용하십시오. 그렇지 않으면 사용자가 선택한 옵션의 값 속성으로 컨트롤의 값을 설정하는 옵션을 다시 선택할 때 onchange 전에 컨트롤 값이 null이됩니다.
스크립트:
import {ControlGroup,Control} from '@angular/common';
...
export class MyComponent{
myForm: ControlGroup;
myArray: Array<Object> = [obj1,obj2,obj3];
myDefault: Object = myArray[1]; //or obj2
ngOnInit(){ //override
this.myForm = new ControlGroup({'myDropdown': new Control(this.myDefault)});
}
myOnSubmit(){
console.log(this.myForm.value.myDropdown); //returns the control's value
}
}
마크 업 :
<form [ngFormModel]="myForm" (ngSubmit)="myOnSubmit()">
<select ngControl="myDropdown">
<option *ngFor="let eachObj of myArray" selected="eachObj==={{myDefault}}"
value="{{eachObj}}">{{eachObj.myText}}</option>
</select>
<br>
<button type="submit">Save</button>
</form>
선택한 바인딩 속성을 추가하지만 다른 필드에 대해서는 null로 설정해야합니다. 예 :
<option *ngFor="#workout of workouts" [selected]="workout.name =='back' ? true: null">{{workout.name}}</option>
이제 작동합니다
@Matthijs의 답변에 추가하십시오. select
요소에 name
속성이 있고 name
HTML 템플릿에서 고유 한지 확인하십시오 . Angular 2는 입력 이름을 사용하여 변경 사항을 업데이트합니다. 따라서 중복 된 이름이 있거나 입력 요소에 연결된 이름이 없으면 바인딩이 실패합니다.
<select class="form-control" name='someting' [ngModel]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option value="{{workout.name}}" *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
양식을 사용하는 경우 태그 name
안에 필드 가 있어야합니다 select
.
태그에 추가 value
하기 만하면 option
됩니다.
selectedWorkout
값은 "back"이어야하며 완료됩니다.
[(ngModel)]을 통한 양방향 바인딩을 원하지 않는 경우 다음과 같이하십시오.
<select (change)="selectedAccountName = $event.target.value">
<option *ngFor="let acct of accountsList" [ngValue]="acct">{{ acct.name }}</option>
</select>
Angular 4에서 내 프로젝트를 테스트했으며 작동합니다! accountsList는 이름이 Account의 속성 인 Account 개체의 배열입니다.
흥미로운 관찰 :
[ngValue] = "acct"는 [ngValue] = "acct.name"과 동일한 결과를 나타냅니다.
Angular 4가 어떻게 그것을 달성하는지 모릅니다!
단계 : 1 속성 선언 클래스 만들기
export class Task {
title: string;
priority: Array<any>;
comment: string;
constructor() {
this.title = '';
this.priority = [];
this.comment = '';
}
}
스템 : 2 컴포넌트 클래스
import { Task } from './task';
export class TaskComponent implements OnInit {
priorityList: Array<any> = [
{ value: 0, label: '✪' },
{ value: 1, label: '★' },
{ value: 2, label: '★★' },
{ value: 3, label: '★★★' },
{ value: 4, label: '★★★★' },
{ value: 5, label: '★★★★★' }
];
taskModel: Task = new Task();
constructor(private taskService: TaskService) { }
ngOnInit() {
this.taskModel.priority = [3]; // index number
}
}
단계 : 3 파일 .html보기
<select class="form-control" name="priority" [(ngModel)]="taskModel.priority" required>
<option *ngFor="let list of priorityList" [value]="list.value">
{{list.label}}
</option>
</select>
산출:
아래와 같이 훌륭하게 작동합니다.
<select class="form-control" id="selectTipoDocumento" formControlName="tipoDocumento" [compareWith]="equals"
[class.is-valid]="this.docForm.controls['tipoDocumento'].valid &&
(this.docForm.controls['tipoDocumento'].touched || this.docForm.controls['tipoDocumento'].dirty)"
[class.is-invalid]="!this.docForm.controls['tipoDocumento'].valid &&
(this.docForm.controls['tipoDocumento'].touched || this.docForm.controls['tipoDocumento'].dirty)">
<option value="">Selecione um tipo</option>
<option *ngFor="let tipo of tiposDocumento" [ngValue]="tipo">{{tipo?.nome}}</option>
</select>
나를 위해 몇 가지 속성을 정의합니다.
disabledFirstOption = true;
get isIEOrEdge(): boolean {
return /msie\s|trident\/|edge\//i.test(window.navigator.userAgent)
}
그런 다음 생성자와 ngOnInit에서
constructor() {
this.disabledFirstOption = false;
}
ngOnInit() {
setTimeout(() => {
this.disabledFirstOption = true;
});
}
그리고 템플릿에서 이것을 선택 요소 내부의 첫 번째 옵션으로 추가합니다.
<option *ngIf="isIEOrEdge" [value]="undefined" [disabled]="disabledFirstOption" selected></option>
첫 번째 옵션을 선택하도록 허용하면 disabledFirstOption 속성의 사용을 제거 할 수 있습니다.
이전에이 문제에 직면했고 다양한 간단한 해결 방법으로 해결했습니다.
Component.html의 경우
<select class="form-control" ngValue="op1" (change)="gotit($event.target.value)">
<option *ngFor="let workout of workouts" value="{{workout.name}}" name="op1" >{{workout.name}}</option>
</select>
그런 다음 component.ts에서 선택한 옵션을 감지 할 수 있습니다.
gotit(name:string) {
//Use it from hare
console.log(name);
}
ngModel과 원하는 값을 입력하면됩니다.
<select id="typeUser" ngModel="Advanced" name="typeUser">
<option>Basic</option>
<option>Advanced</option>
<option>Pro</option>
</select>
참고 URL : https://stackoverflow.com/questions/35978450/angular-2-dropdown-options-default-value
'IT' 카테고리의 다른 글
Vim에서 여러 버퍼를 삭제하는 방법은 무엇입니까? (0) | 2020.08.03 |
---|---|
Guid에 대한 C # 정규식 (0) | 2020.08.03 |
C ++에서 std :: string을 LPCWSTR로 변환하는 방법 (유니 코드) (0) | 2020.08.03 |
맞춤 HTML5 필수 항목 확인 메시지 설정 (0) | 2020.08.03 |
LESS의 빠른 인 하위 선택기 (0) | 2020.08.03 |