2016-07-08 3 views
0

Я использую Angular 2 RC4.Угловой 2 Привязать выбранный атрибут к динамически созданным настройкам

создать выберите элемент раскрывающегося списка, который связан с переменной в моем компоненте и создать возможности для этого выбора с помощью *ngFor, например:

<select id="role-select" class="form-control" [(ngModel)]="foo.bars" multiple> 
    <option *ngFor="let bar of bars">{{bars}}</option> 
</select> 

Переменная bars динамически заполняется:

ngOnInit(){ 
    this._service.GetBars().subscribe(
     result => { 
      this.bars = result; 
     }, 
     err => { 
      console.log(err); 
     }, 
     () => {} 
    ); 
} 

Я также динамически заполнить foo.bars переменную:

constructor(public _service: Service){ 
    _service.GetFooBars() 
     .subscribe((data) => { 
      this.foo.bars = data; 
     },(err) => { 
      console.log(err); 
     }, () => { 
      // done      
     }); 
} 

Теперь то, что я хочу сделать, - установить атрибут selected на true для любых параметров, которые соответствуют bars в foo.bars. В настоящее время я использую это:

var roleSelect = document.getElementById("role-select"); 
this.foo.bars.forEach((v,i) => { 
    for (var j = 0; j < roleSelect.options.length; j++) { 
     if (roleSelect.options[j].text === v) { 
      roleSelect.options[j].selected = true; 
     } 
    } 
}); 

Это отлично работает, но transpiler кидает ошибка говорят опции не существует на HTMLElement [] и я хотел бы немного более надежное решение.

Любая идея оценивается.

ответ

0

как о

ngOnInit(){ 
    this._service.GetBars().contactMap(result => { 
     this.bars = result; 
     return this._service.GetFooBars(); 
    }).subscribe(
     data => { 
      this.foo.bars = data; 
      setSelected(); 
     }, 
     err => console.log(err) 
     ) 
} 

setSelected(){ 
    var roleSelect = document.getElementById("role-select"); 
    this.foo.bars.forEach((v, i) => { 
     for (var j = 0; j < roleSelect.options.length; j++) { 
      if (roleSelect.options[j].text === v) { 
       roleSelect.options[j].selected = true; 
      } 
     } 
    }); 
} 

однако, я думаю, что вы на самом деле не нужны setSelected функции.

В теории, ngModel должен позаботиться об этом.

если нет, то в шаблоне, вы можете добавить [selected]="bar===foo.bars"

<select id="role-select" class="form-control" [(ngModel)]="foo.bars" multiple> 
    <option *ngFor="let bar of bars" [selected]="bar===foo.bars">{{bars}}</option> 
</select> 
+0

Неа, я все равно получите ошибки transpiler. и 'foo.bars' - массив, поэтому простое сравнение строки и массива не даст мне требуемого результата. тем не менее, мне было бы интересно узнать, действительно ли ngModel позаботится об этом – Colum

+0

попытайтесь сделать плункер, чтобы люди могли вам помочь. Я не тестировал свой код, но он должен работать. Я вижу, что первое решение, вероятно, все еще вызывает ту же проблему, вы попробовали решение шаблона? – maxisam

+0

, так что вы это исправите? как ? – maxisam

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