我正在尝试创建一个简单的select
组件,它通过属性接收一些数据并呈现所需的选项。我计划在另一个组件的模板中使用此选择组件,例如PageComponent
的模板( page.template.html )。
我使用select
将PageComponent的变量绑定到[(ngModel)]
组件。选择一个选项后,变量get的值按预期更新,但如何在页面加载时将其设置为指向第一个选项而不触发select
组件上的手动选择?
这是代码。
<select ui-select
[options]="options"
[(ngModel)]="alertType"
[defaultValue]="'Select an alert Type'">
</select>
{{alertType}} <!-- To see the value while debugging -->
PageComponent
类alertType:any;
options = [
{id:1, value:"item-1"},
{id:2, value:"item-2"},
{id:3, value:"item-3"}
];
import {Component, Input} from '@angular/core'
@Component({
selector: '[ui-select]',
template: `
<option *ngIf="defaultValue" value="-1">{{defaultValue}}</option>
<option *ngFor="let option of options" [value]="option.id">{{option.value}}</option>
`
})
export class SelectComponent {
@Input() options: any;
@Input() defaultValue: string;
}
现在,{{alertType}}
值最初不会显示任何内容,只有在从select
框中选择新选项时才会更新。
我确实理解这种情况正在发生,因为alertType
默认情况下PageComponent
设置为未定义,但我无法弄清楚如何在页面加载时将其设置为第一个选项值。
最初的问题已经得到解答,但我还有一个问题就此更新了问题。
在更新的代码中,select
组件从模板接受defaultValue
自定义属性,并为该默认值呈现条件<option>
。
现在,如何设置defaultValue
,alertType
应该具有该值,否则它应该具有options
列表中第一项的值。
答案 0 :(得分:5)
因此,您希望将alertType
设置为所选值,无论是来自您提供的options
还是来自defaultValue
(第一个选项)。
这可以通过使用AfterViewInit
hook,
修改后的代码将是......
@Component({
selector: 'my-app',
directives:[
SelectComponent
],
template : `<select ui-select
[options]="options"
[(ngModel)]="alertType"
[defaultValue]="'Select an alert Type'" #mySelect>
</select>
{{alertType}}`
})
export class App implements AfterViewInit{
@ViewChild('mySelect', {read: ViewContainerRef}) mySelect;
options = [
{id: 1, value: "item-1", selected: false},
{id: 2, value: "item-2", selected: true},//if all options will be false then defaultValue will be selected
{id: 3, value: "item-3", selected: false}
];
alertType: any;
ngAfterViewInit() {
this.alertType = this.mySelect.element.nativeElement.value;
}
}
我创建了plunker,请检查!!
答案 1 :(得分:2)
你可以这样试试:
options = [
{id:1, value:"item-1"},
{id:2, value:"item-2"},
{id:3, value:"item-3"}
];
alertType: any = options[0].id;
答案 2 :(得分:0)
对于您的新问题,您可以利用您的ui-select组件中的selected
属性:
<option *ngIf="defaultValue" selected="true" value="-1">{{defaultValue}}</option>