为了扩展费尔南多的答案,@Element
装饰器将组件的根元素绑定到此属性。重要的是要注意这种方法的一些属性:
- @Element 绑定属性仅在组件加载后可用 (
componentDidLoad
)。
- 因为该元素是标准 HTMLElement,所以您可以使用标准或方法访问当前组件中的元素,以检索和操作它们。
.querySelector(...)
.querySelectorAll(...)
这是一个示例,显示何时可以访问元素,以及如何操作该元素中的节点(从 stencil 0.7.24 开始正确):
import { Component, Element } from '@stencil/core';
@Component({
tag: 'my-component'
})
export class MyComponent {
@Element() private element: HTMLElement;
private data: string[];
constructor() {
this.data = ['one', 'two', 'three', 'four'];
console.log(this.element); // outputs undefined
}
// child elements will only exist once the component has finished loading
componentDidLoad() {
console.log(this.element); // outputs HTMLElement <my-component ...
// loop over NodeList as per https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/
const list = this.element.querySelectorAll('li.my-list');
[].forEach.call(list, li => li.style.color = 'red');
}
render() {
return (
<div class="my-component">
<ul class="my-list">
{ this.data.map(count => <li>{count}</li>)}
</ul>
</div>
);
}
}