【发布时间】:2020-05-26 23:20:38
【问题描述】:
我正在使用primeng 制作一个表格,并创建了一个三行三列的表格,每个数据都是静态的..
尽管我使用了外部库,但最后我还是尝试仅遍历 DOM..
<p-table [value]="getData()">
<ng-template pTemplate="header">
<tr>
<th>Head 1</th>
<th>Head 2</th>
<th>Head 3</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-car>
<tr>
<td>Data 1.1</td>
<td>Data 1.2</td>
<td><select><option>Select</option><option value="test1">Opt 1</option><option value="test2">Opt 2</option></select></td>
</tr>
<tr>
<td>Data 2.1</td>
<td>Data 2.2</td>
<td><select><option>Select</option><option value="test1">Opt 1</option><option value="test2">Opt 2</option></select></td>
</tr>
<tr>
<td>Data 3.1</td>
<td>Data 3.2</td>
<td><select><option>Select</option><option value="test1">Opt 1</option><option value="test2">Opt 2</option></select></td>
</tr>
</ng-template>
</p-table>
现在我需要获取最后一列选中项的选择框值,为此我写了addEventListener之类的,
select.addEventListener('change', this.onclick.bind(this))
但它不起作用..onclick() 方法不会触发..
我认为问题可能是由ngAfterViewInit 引起的,但如果我在ngOnInit 内提供它,则 dom 元素本身无法访问..
工作 Stackblitz: https://stackblitz.com/edit/primeng-tables-dhzmbt
请帮我在选择框中实现addEventListener,仅使用纯JS/TS方式,模板不能修改..
【问题讨论】:
-
为什么不能在模板中的选择元素处使用 (click)="onClick()"?
-
@katzz0,这是给定的要求,我需要选择 dom 元素,然后需要像我上面尝试的那样在 typescript 端单独制作 addEventListener .. 我唯一需要的是让工作添加的事件监听器..
-
将
changeDetection: ChangeDetectionStrategy.OnPush添加到您的组件metadata以防止重新渲染。每个更改检测周期的角度重新渲染视图,即DOM在渲染之间不可靠 -
@StasAmasev,您能否通过
ChangeDetectionStrategy.OnPush帮助我实现结果并提供适当的示例..
标签: javascript html angular typescript dom-events