参考号
Markup 模板将为您处理所有 DOM 元素渲染,但如果您确实需要访问模板渲染的元素,则可以使用 ref 属性提供一个句柄键,然后可以使用该句柄键来获取元素。
javascript
html`<button ref="btn">click me</button>`多重参考
ref 属性始终返回一个数组。因此,您可以使用同一把钥匙一次抓取多个物品。
javascript
const temp = html`
<li ref="item">item 1</li>
<li ref="item">item 2</li>
<li ref="item">item 3</li>
`.render(document.body)在呈现模板之前不会创建引用。这是因为创建模板只是注册一个模板,并在渲染阶段收集元素。
访问参考文献
要访问这些参考元素,您可以读取模板实例中的 refs 属性。
javascript
const temp = html`
<li ref="item">item 1</li>
<li ref="item">item 2</li>
<li ref="item">item 3</li>
`.render(document.body)
console.log(
temp.refs['item'] // (3) [li, li, li]
)refs 属性返回一个对象文字,其中包含由您在 ref 属性中提供的值键入的元素数组。
嵌套引用
您可以通过模板实例(包括其子模板)访问任何引用。
javascript
const items = [
html`<li ref="item">Buy groceries</li>`,
html`<li ref="item">Go to gym</li>`,
html`<li ref="item">Write a blog</li>`,
]
const temp = html`
<ul ref="list">
${items}
</ul>
`.render(document.body)
console.log(
temp.refs // {item: Array(3), list: Array(1)}
)此功能使您可以专注于顶级模板并从那里开始处理所有事情。这并不意味着您无法访问每个单独模板级别的参考。只是更方便而已。
javascript
items[0].refs['item'] // [li]
temp.refs['list'] // [ul]
temp.refs['item'] // [li, li, li]动态参考
所有引用都是动态的,这意味着当事物从模板中渲染或卸载时,引用会被添加或删除。
javascript
const items = [
html`<li ref="item">Buy groceries</li>`,
html`<li ref="item">Go to gym</li>`,
html`<li ref="item">Write a blog</li>`,
]
const temp = html`
<ul ref="list">
${items}
</ul>
`.render(document.body)
console.log(
temp.refs // {item: Array(3), list: Array(1)}
)
items[0].unmount()
items[2].unmount()
console.log(
temp.refs // {item: Array(1), list: Array(1)}
)因此,在执行任何操作之前,您应该始终检查参考是否存在。这将指示该元素是否仍在模板中呈现。
编辑本文档