背景:到目前为止,我并不介意如何将模板 html 文件导入我的 vanilla webcomponent,因为我总是编写小的 html 代码。因此,我在我的 webcomponent .js 文件之上编写了 html 代码,并执行以下操作:
const template = document.createElement("template");
template.innerHTML = `<div id="firstdiv"><input id="inputAny"/></div>`;
class anyVanillaWebComponent extends HTMLElement {
...
connectedCallback() {
this.attachShadow({ mode: "open" });
this.shadowRoot.appendChild(template.content.cloneNode(true));
const inputAny = this.shadowRoot.getElementById("inputAny");
...
这在教程、博客和论坛中很常见。现在我想将 html 与 javascript 分开,假设这将使我的项目树更清晰。
环顾四周,我发现了一些基于浏览器将不再支持“导入”的假设的讨论[(请参阅底部关于导入替代方案的更新讨论)]。1
基本上,这让我想到了两种可能性:
1 - 将 .js 文件从 html 导入到 html 示例:
<template id="my-webcomponent-template">
<link rel="stylesheet" href="./some.css">
<div>some content ...</div>
</template>
<script src="MyWebcomponent.js"></script>
2 - 从 .js 文件中异步获取 my-webcomponent.html
(async () => {
const res = await fetch('/MyWebcomponent.html');
const textTemplate = await res.text();
const HTMLTemplate = new DOMParser().parseFromString(textTemplate, 'text/html')
.querySelector('template');
class MyWebcomponent extends HTMLElement {...
根据 2017 年的此类讨论,我似乎应该避免使用选项 1,但我不清楚为什么以及选项 2 是否有一些真正的优势。所以我的直截了当的问题是:“进口”和在编码 Vanilla Web 组件时“获取”html 文件,该文件预计将由支持本机 Web 组件的浏览器(例如 Chrome)直接呈现?