我想使用所有带有yarn add use-position
标记的元素,并在其周围包装HTML结构,以便表应具有响应性,但是由于某些原因,它无法正常工作。
您能告诉我我在做什么错吗,为什么它不起作用?
table
答案 0 :(得分:0)
首先不是 AfterContentChecked
。在中应为 ngAfterContentChecked
。
但是请使用 ngAfterViewInit
生命周期挂钩代替 ngAfterContentChecked
进行实施。将id
属性添加到table
并使用 getElementById
代替 getElementsByTagName
。不要一次设置table-responsive
类。首先创建div
元素,然后添加class
。
HTML
<div>
<table id="table" class="table">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Country</th>
</tr>
</thead>
<tbody>
<tr>
<td>Sudarshana</td>
<td>Sri Lanka</td>
</tr>
</tbody>
</table>
</div>
TS
ngAfterViewInit() {
this.el = document.getElementById('table');
this.wrapper = document.createElement('div');
this.wrapper.classList.add('table-responsive');
this.el.parentNode.insertBefore(this.wrapper, this.el);
this.wrapper.appendChild(this.el);
}
答案 1 :(得分:0)
ngAfterContentChecked() {
const el = document.getElementsByTagName('table');
this.doItOnce = true;
if (el.length && this.doItOnce) {
this.doItOnce = !this.doItOnce;
for (let i = 0; i < el.length; i++) {
const element = el.item(i);
const wrapper = document.createElement('div');
wrapper.className = 'table-responsive';
element.parentNode.insertBefore(wrapper, element);
wrapper.appendChild(element);
}
}
}