【问题标题】:Angular2 ngModel selectAngular2 ngModel 选择
【发布时间】:2017-01-16 04:12:03
【问题描述】:

我不知道如何将选定的值放入对象或数组中,如果我选择第一个选择器 levelNum 值将具有第一个选择的对象,如果我选择第二个它将有两个不同的数字用于单独的选择器但是仍然是相同的 ngModel 名称。对于从 ng-for 获得的动态选择器,我需要这种方式。这是我的代码:

//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>
     <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: any;
  levels:Array<Object> = [
      {num: 0, name: "AA"},
      {num: 1, name: "BB"}
  ];
  toNumber(){
    this.levelNum = +this.levelNum;
    console.log(this.levelNum);
  }
}

【问题讨论】:

  • 在 toNumber 函数中检查 this.levelNum 是什么类型的对象
  • 如果我将变量类型更改为数组仍然是同样的问题,它总是从任何选择器中获取最后一个选定的项目,但它应该将选定的值推送到对象..
  • 你能提供你的代码吗?您意识到您正在从代码更新 ngModel?

标签: angular


【解决方案1】:

我没有正确理解你的问题,但也许这个 plunker 会帮助你:

https://plnkr.co/edit/sGvWZoaP5EWDkkUJE0R2?p=preview

//our root app component
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>Hello {{name}}</h2>

      <select (change)="levelChanged('uniqueName1', $event.target.value)">
        <option *ngFor="let lvl of _levels" [value]="lvl.value">{{lvl.name}}</option>
      </select>
      Selected Level1: {{_selectedLevel['uniqueName1']}}

      <br />

      <select (change)="levelChanged('uniqueName2', $event.target.value)">
        <option *ngFor="let lvl of _levels" [value]="lvl.value">{{lvl.name}}</option>
      </select>
      Selected Level2: {{_selectedLevel['uniqueName2']}}

      <br /><br />

      Selected Level-Array:

      <br /><br />

      {{_selectedLevel | json}}
    </div>
  `,
})
export class App {

  const _levels = [
    { value: 0, name: "AA" },
    { value: 1, name: "BB" },
    { value: 2, name: "CC" },
    { value: 3, name: "DD" },
  ];

  private _selectedLevel = {};

  constructor() {
    this.name = 'Angular2'
  }

  levelChanged(name: string, lvl: any) {
    this._selectedLevel[name] = +lvl;
  }
}

@NgModule({
  imports: [ BrowserModule ],
  declarations: [ App ],
  bootstrap: [ App ]
})
export class AppModule {}

【讨论】:

  • 我如何将所有选定的对象集中到一个对象中?
  • 全部选中?你想要一个包含两个选定级别的数组吗?或者你的目标到底是什么? :) 查看我编辑的答案和 plunker ..
  • mxii,是的,这就是我想要的,如果我有动态选择器怎么办,所以我不知道长度是多少?有什么方法可以使这个数组成为动态的?
  • 我认为你必须使用一个对象,而不是一个数组。但是你的动态选择器必须有一个唯一的名字!查看更新的 plunker..
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
相关资源
最近更新 更多