获取子元素

时间:2016-09-12 19:53:37

标签: angular typescript

请看下面的代码。

import { Component,ViewChild,QueryList,ViewChildren } from '@angular/core'

@Component ({
selector : 'other-component',
template : `
          <h2>OtherComponent<h2>
          <table #tab id="tab">
            <tr *ngFor="let val of valArray">
              <td>{{val}}</td>
              <input type="checkbox" [value]="val">
            </tr>
          </table>
         <button (click)="getChecked()">click me</button>`
})
export class OtherComponent{
  valArray = ['one','two','three','four'];
  @ViewChild ('tab') elem;
  getChecked = () => {

    console.log (this.elem.nativeElement.children[0].children)
  }

}

在表格行的末尾有一个已分配行值(JSON对象)的复选框,现在我想收集角度2中的所有复选框。

在普通的javascript中我可以像下面这样轻松地完成这个

var yy = document.getElementById('tab').getElementsByTagName('input');

this.elem.nativeElement.children[0].children

我得到了我想要的东西

这给了我一些 tr 元素,我从中检查了输入框

在角度2中有没有更好的方法呢?

1 个答案:

答案 0 :(得分:14)

更改html(将#cbx添加到input),例如:

<tr *ngFor="let val of valArray"><input #cbx type="checkbox" [value]="val"></tr>    

然后在你的组件类中:

@ViewChildren('cbx') checkboxes;
getChecked = () => {
  console.log(this.checkboxes.toArray().map(x => x.nativeElement));
}

它将打印所需复选框的数组

另请参见实时 Plunker Example

<强>更新

替代方法是直接使用dom api:

@ViewChild ('tab') elem;
getChecked = () => {
  console.log(this.elem.nativeElement.getElementsByTagName('input'));
  console.log(this.elem.nativeElement.querySelectorAll('input'));
}