【发布时间】:2018-10-28 23:32:41
【问题描述】:
我正在尝试了解新的 HTML 自定义元素。
我的目标是,给定一些数据数组,创建自定义元素的 n 个实例。例如,给定一个包含 10 个用户的列表,创建 10 个用户 html 对象。
好的 - 所以我在 html 中定义了一个自定义元素
HTML
<template-user>
<div class="user-name"></div>
</template-user>
然后我创建我的控制器
JS
class UserTemplate extends HTMLElement {
constructor(){
super();
this.username = this.querySelectorAll('[class="user-name"]')[0];
}
setName(name){
this.username.innerHtml = name;
}
}
customElements.define('template-user', UserTemplate);
页面加载正常,但现在我对如何重用该元素感到困惑。如果我在做普通的老学校的事情,我会有一个 for 循环抽出一些 HTML 字符串并设置一些东西的 innerHTML。但现在我宁愿做类似的事情
for(let i = 0; i < users.length; i++){
let userTemplate = new UserTemplate();
userTemplate.setName(user.name);
// append to user list, etc..
}
当我尝试这样做时,它似乎几乎可以工作。但它找不到username,即this.querySelectorAll 将返回null。仅当我尝试构造此元素的新实例时。那么,我应该如何创建新的自定义元素 DOM 对象?
【问题讨论】:
-
您的问题与模板无关。请注意,规范中没有保证访问子元素的生命周期挂钩。如果您想了解更多信息(以及如何解决):gist.github.com/franktopel/5d760330a936e32644660774ccba58a7
标签: javascript web-component custom-element