【发布时间】:2016-11-06 22:33:06
【问题描述】:
我正在尝试创建一个简单的select 组件,它通过属性接收一些数据并呈现所需的选项。我打算在另一个组件的模板中使用这个选择组件,比如PageComponent 的模板(page.template.html)。
我正在使用[(ngModel)] 将PageComponent 的变量绑定到select 组件。选择一个选项后,变量 get 的值会按预期更新,但是如何在页面加载时将其设置为指向第一个选项,而不触发手动选择 select 组件?
这是代码。
在 page.template.html 中
<select ui-select
[options]="options"
[(ngModel)]="alertType"
[defaultValue]="'Select an alert Type'">
</select>
{{alertType}} <!-- To see the value while debugging -->
在page.component.ts,PageComponent类
alertType:any;
options = [
{id:1, value:"item-1"},
{id:2, value:"item-2"},
{id:3, value:"item-3"}
];
在 select.component.ts 中
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 列表中第一项的值。
P.S - 如果您有关于构建组件的方法的 cmets,请随时将它们添加到答案中,因为这将有助于我学习。
【问题讨论】:
-
"如果设置了 defaultValue" - 从哪里设置?以编程方式还是通过选择元素?
-
从
page.template.html中的select框中设置为自定义属性。上面是[defaultValue]="'Select an alert Type'"
标签: data-binding typescript angular angular2-ngmodel