2016-03-07 55 views
0

一个QueryList获取值的最佳做法,所以我创建一个列表输入:Angular2:从输入

template: `   
     <div *ngFor="#item of m_checkboxes"> 
      <label class="pull-left">{{item.name}}</label> 
      <Input #checkInputs type="checkbox" (change)="onChange($event.target.value)" [checked]="item.checked" value="{{item.value}}" class="pull-left" style="margin-right: 2px"> 
     </div> 

,我通过创建的输入的QuestList:

@ViewChildren('checkInputs') 
    inputs:QueryList<any> 

,并在任何一个的输入复选框点击我的地图循环过Observables,但我不得不进入NativeElement抓住检查值,我觉得必须有更好的方式...

这就是我所做的现在,这是有效的......但这是否是最佳做法?

private onChange(value) {  
     this.inputs.map(v=>{ 
      console.log(v.nativeElement.checked); // grab value from native :-(
     }); 

    } 

感谢

肖恩

回答

2

而不是检查DOM元素,我认为这将是更好地检查数据 - 的item.checked值,无论这些都是在你的组件。如果您检查DOM的原因是更新数据值,那么这就是双向数据绑定的用途。我相信只要将[checked]="item.checked"更改为[(ngModel)]="item.checked"将使双向绑定成为可能,以便Angular2为您更新数据值。

+0

我只是想远离2路绑定,因为我将创建每个表记录10个复选框,并可能有500个记录,所以5000 5000路绑定......任何其他建议? tx Sean – born2net

+0

@ born2net你为什么试图远离2路绑定?如果您的自定义自制解决方案比Angular团队专门为此目的制作的性能更好,那么无论有多少个绑定,我都会非常**。 – Douglas

+0

嗯,我的想法是,用我的onChange我做了一张地图,我完成了,但有2种方式,它必须跟踪这些可能的5000多个MEM地点...如果这是最好的方式,好...但想知道除了2种方式之外,还有其他方式来获得这些动态创建的输入的状态...... tx,Sean。 – born2net