【问题标题】:setting display of select in angular 2以角度 2 设置选择的显示
【发布时间】:2017-07-22 14:48:07
【问题描述】:

我正在尝试将选择标记的显示设置为通过另一个调用获得的值。但即使在尝试 [selected] 、[ngValue]、[value] 等之后我也无法这样做。

 <select class="form-control" [(ngModel)]="selectedRegion" name="Region" (ngModelChange)="onRegionChange(selectedRegion)" val="true" id="cloud-region" >
                        <option *ngFor="let region of regions"  [selected]="selectedRegion.Name===region.Name?'region.Name':null">{{region.Name}}</option>
</select>

我在通过 Observable 中的 http 响应获取数据后设置了“selectedRegion”的值。我基本上想将在另一个调用中接收到的区域显示为从预先确定的数组中选择的选择显示,该数组也包含该值。

在这个 plunker 中尝试过。做不到。 https://plnkr.co/edit/njGlIV?p=preview

谢谢。

【问题讨论】:

    标签: html angular select default-value display


    【解决方案1】:

    我认为您的 &lt;option&gt;

    上缺少 [value] 属性

    <select 
      class="form-control" 
      [(ngModel)]="selectedRegion" name="Region"
      (ngModelChange)="onRegionChange(selectedRegion)"
      val="true" 
      id="cloud-region">
      
      <option 
      *ngFor="let region of regions"
      [value]="region.Name"
      [selected]="selectedRegion.Name===region.Name?'region.Name':null">{{region.Name}}</option>
    </select>

    如果您已经将 select 元素与模型绑定在一起,我认为实际上不需要 selected。您的选择没有反映的原因是因为您的选择没有价值。

    更新:

    根据您的 plunkr,我添加了一个模拟的 http 调用来从 Observable 中检索一个值。从流中接收到值后,我立即更新了我的模型。

    //our root app component
    import {Component, Directive, Output, EventEmitter, Input, SimpleChange} from 'angular2/core'
    import {Observable} from 'rxjs/Observable';
    import {Observer} from 'rxjs/Observer';
    //import 'rxjs/Rx';
    
    @Component({
      selector: 'my-app',
      template:`
        <h1>Selecting Number</h1>
        <select type="number" [(ngModel)]="levelNum" (ngModelChange)="toNumber()">
          <option *ngFor="let level of levels" [ngValue]="level.num">{{level.name}}</option>
        </select>
        {{levelNum}}
      `,
    })
    export class AppComponent {
      levelNum:number = 0;
      levels:Array<Object> = [
          {num: 0, name: "AA"},
          {num: 1, name: "BB"}
      ];
      
      ngOnInit(){
        this.fakeHttpCall()
        .subscribe(res => {
          this.levelNum = res;
        });
      }
    
      toNumber(){
        this.levelNum = +this.levelNum;
        console.log(this.levelNum);
      }
      
      fakeHttpCall(){
        let request = new Observable(
          obs => {
            let timeout = setTimeout(() => {
              obs.next(1);
              obs.complete();
              clearTimeout(timeout);
            },2000);
          }  
        );
        
        return request;
      }
    }

    【讨论】:

    • 在尝试时,它会显示值,但不是反映在 selectedRegion.Name 中的值,而是对象数组中的另一个值。您可以通过编辑上面的 plunker 来显示它,通过在组件中设置它的值来将选项中的第二个显示为显示吗?非常感谢。
    • @SandeepBhat 请参考我的更新,希望对你有帮助。
    • 在您的选项标签中添加 [ngValue]="region.name"。 value 只取字符串类型,需要 NgValue 处理对象等复杂值。
    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2020-10-15
    相关资源
    最近更新 更多