在Angular 1中,我可以使用以下选项为下拉框选择默认选项:
<select class="form-control" [(ngModel)]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
在Angular 2中我有:
[{name: 'arm'}, {name: 'back'}, {name:'leg'}]
如果我的选项数据是:
,我如何选择默认选项 back
我默认打开的值是{{1}}?
答案 0 :(得分:71)
向selected
属性添加绑定,如下所示:
<option *ngFor="#workout of workouts" [selected]="workout.name == 'back'">{{workout.name}}</option>
答案 1 :(得分:43)
如果您将默认值分配给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
中使用的值相同。即使具有相同属性和值的另一个对象实例也不会被识别。仅检查对象标识。
<强>更新强>
Angular添加了对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; }
这样可以将不同的(新)对象实例设置为默认值,并使用compareFn
来确定它们是否应该被视为相等(例如,如果id
属性相同。
答案 2 :(得分:33)
答案 3 :(得分:29)
将此代码添加到选择列表的o位置。
<option [ngValue]="undefined" selected>Select</option>
答案 4 :(得分:20)
你可以这样做
<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>
或者你可以通过这种方式设置deafult vlaue
<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>
答案 5 :(得分:13)
使用index将第一个值显示为默认值
<option *ngFor="let workout of workouts; #i = index" [selected]="i == 0">{{workout.name}}</option>
答案 6 :(得分:6)
根据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;
}
答案 7 :(得分:4)
在这个问题上有点挣扎,但最终得到了以下解决方案......也许它会帮助别人。
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];
}
}
答案 8 :(得分:3)
你可以这样做:
<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&LT; html属性名称&gt;]用于在angular2中设置html属性。
另一种方法是将typescript文件中的模型值设置为:
this.selectedWorkout = this.workouts.length > 0
? this.workouts[0].name
: 'No data found';//'arm'
答案 9 :(得分:3)
您可以使用[(ngModel)]
而不是<select class="form-control" **[ngModel]="selectedWorkout"** (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
,这是好的
1011967
答案 10 :(得分:2)
完全充实其他帖子,这是Angular2快速入门中的作用,
要设置DOM默认值:以及*ngFor
,请在<option>
的{{1}}属性中使用条件语句。
设置selected
的默认值:使用其构造函数参数。否则在onchange之前,当用户重新选择一个选项时,该选项使用所选选项的value属性设置控件的值,控件值将为null。
脚本:
Control
标记:
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
}
}
答案 11 :(得分:0)
<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
值应“返回”,并完成。
答案 12 :(得分:0)
添加到@Matthijs的答案,请确保您的select
元素具有name
属性,并且其name
在您的html模板中是唯一的。 Angular 2使用输入名称来更新更改。因此,如果存在重复的名称或者输入元素没有附加名称,则绑定将失败。
答案 13 :(得分:0)
添加选定的绑定属性,但请确保将其设为null,对于其他字段,例如:
<option *ngFor="#workout of workouts" [selected]="workout.name =='back' ? true: null">{{workout.name}}</option>
现在它会起作用
答案 14 :(得分:0)
如果您不希望通过[(ngModel)]进行双向绑定,请执行以下操作:
<select (change)="selectedAccountName = $event.target.value">
<option *ngFor="let acct of accountsList" [ngValue]="acct">{{ acct.name }}</option>
</select>
刚刚在我的Angular 4项目上测试过它的确有效! accountsList是一个Account对象数组,其中name是Account的属性。
有趣的观察:
[ngValue] =“acct”与[ngValue] =“acct.name”的结果相同。
不知道Angular 4是如何实现它的!
答案 15 :(得分:0)
步骤: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>
<强>输出:强>
答案 16 :(得分:0)
效果很好,如下所示:
<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>
答案 17 :(得分:0)
对我来说,我定义了一些属性:
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;
});
}
然后在模板中,将其添加为select元素内的第一个选项
<option *ngIf="isIEOrEdge" [value]="undefined" [disabled]="disabledFirstOption" selected></option>
如果允许选择第一个选项,则只需删除属性disableFirstOption的用法即可
答案 18 :(得分:0)
就我而言,这里的this.selectedtestSubmitResultView
会根据条件设置为默认值,并且变量testSubmitResultView
必须是一个且与testSubmitResultView
相同。这确实对我有用
<select class="form-control" name="testSubmitResultView" [(ngModel)]="selectedtestSubmitResultView" (ngModelChange)="updatetestSubmitResultView($event)">
<option *ngFor="let testSubmitResultView of testSubmitResultViewArry" [ngValue]="testSubmitResultView" >
{{testSubmitResultView.testSubmitResultViewName}}
</option>
</select>
有关更多信息,
testSubmitResultViewArry: Array<any> = [];
selectedtestSubmitResultView: string;
getTestSubmitResultViewList() {
try {
this.examService.getTestSubmitResultViewDetails().subscribe(response => {
if (response != null && response !== undefined && response.length > 0) {
response.forEach(x => {
if (x.isDeleted === false) {
this.testSubmitResultViewArry.push(x);
}
if (x.isDefault === true) {
this.selectedtestSubmitResultView = x;
}
})
}
});
} catch (ex) {
console.log('Method: getTestSubmitResultViewList' + ex.message);
}
}
答案 19 :(得分:0)
我在使用 angular 11 时遇到了同样的问题。但最终找到了解决方案。
<option disabled selected value="undefined">Select an Option</option>
ngFor 的完整示例。
<select name="types" id="types" [(ngModel)]="model.type" #type="ngModel">
<option class="" disabled selected value="undefined">Select an Option</option>
<option *ngFor="let item of course_types; let x = index" [ngValue]="type.id">
{{ item.name }} </option>
</select>
答案 20 :(得分:-1)
之前我遇到过这个问题,我用不同的简单解决方法修复了它
适用于您的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);
}
答案 21 :(得分:-1)
您只需要放入ngModel和要选择的值即可:
<select id="typeUser" ngModel="Advanced" name="typeUser">
<option>Basic</option>
<option>Advanced</option>
<option>Pro</option>
</select>