2016-09-08 6 views
0

У меня нет идеи, как бы поместить выбранное значение в Object или в Array, если я выберу первый уровень селектора. ЗначениеNum будет иметь объект с первым выбранным, и если я выберем второй, у него будет два разных номера внутри разделенные селектора, но все же одно имя ngModel. Мне нужен этот способ для динамических селекторов, которые я получаю от ng-for. Вот мой код:Angular2 ngModel select

//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); 
    } 
} 
+0

проверить, какой тип объекта является this.levelNum в ваша функция toNumber – jmachnik

+0

, если я изменяю тип переменной в Array, все еще ту же проблему, она всегда получает только последний выбранный элемент из любого селектора, но он должен нажать выбранное значение на объект. – user3278890

+0

вы можете предоставить плункер с кодом? Вы понимаете, что обновляете ngModel из кода? – jmachnik

ответ

0

Я не понимаю вашу проблему должным образом, но, возможно, это 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 {} 
+0

Как бы я мог отобразить все объекты в одном объекте? – user3278890

+0

все выбрано? вам нужен массив обоих выбранных уровней? или что именно ваша цель достичь? :) см. мой отредактированный ответ и plunker .. – mxii

+0

mxii, да, это то, что я хочу, что, если у меня есть динамические селекторы, поэтому я не знаю, сколько длины? любой способ, чтобы этот массив был динамическим? – user3278890

Смежные вопросы