HTML Imports 的弃用从本质上改变了资源的加载顺序。自定义元素本质上已经成为脚本优先而不是模板优先。如果您的元素需要模板,请从脚本中加载它。如果没有,那就去上班吧。坦率地说,虽然我在最初的几周内对它有抵抗力,但我已经爱上了它。事实证明,加载模板等外部资源并没有那么糟糕。
下面是一些从外部文件加载 HTML 模板的简单代码:
使用异步/等待:
async function getTemplate(filepath) {
let response = await fetch(filepath);
let txt = response.text();
let html = new DOMParser().parseFromString(txt, 'text/html');
return html.querySelector('head > template');
}
基于承诺:
function getTemplate(filepath) {
return fetch(filepath)
.then(response => {
let txt = response.text();
let html = new DOMParser().parseFromString(txt, 'text/html');
return html.querySelector('template');
});
}
两者都可以通过以下两种方式调用:
异步/等待:
let tpl = await getTemplate('path/to/template.html');
承诺:
getTemplate('path/to/template.html')
.then(function doSomething(tpl) {
// Put your code here...
});
生成的代码非常简单,可以通过多种方式轻松实现。事实上,我有一个小的 SuperClass 为我处理它,我所有的自定义元素都继承自它。相反,您可以使用 mixin,我过去也这样做过。
艰苦的工作只是颠倒订单,即使这样也不是很难,除非您使用 1000 多个组件。它可能只需很少的工作就可以实现自动化。