在Angular 2中第一页加载时设置[(ngModel)]的值

时间:2016-07-05 07:20:46

标签: data-binding typescript angular angular2-ngmodel

我正在尝试创建一个简单的select组件,它通过属性接收一些数据并呈现所需的选项。我计划在另一个组件的模板中使用此选择组件,例如PageComponent的模板( page.template.html )。

我使用select将PageComponent的变量绑定到[(ngModel)]组件。选择一个选项后,变量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>

现在,如何设置defaultValuealertType应该具有该值,否则它应该具有options列表中第一项的值。

P.S - 如果您对构建组件所使用的方法有任何意见,请随时将它们添加到答案中,因为这将有助于我学习。

3 个答案:

答案 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>