Устаревание HTML Imports существенно изменило порядок загрузки ресурсов.Пользовательские элементы, по сути, стали в первую очередь сценариями, а не шаблонами.Если вашему элементу нужен шаблон, загрузите его из скрипта.Если нет, просто иди на работу.Честно говоря, хотя я был устойчив к этому в течение первых нескольких недель, я полюбил это.И получается, что загрузка внешних ресурсов, таких как шаблоны, не так уж и плоха.
Вот простой код, который будет загружать шаблон HTML из внешнего файла:
с использованием async /await:
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');
});
}
Оба могут быть вызваны с обоими из следующих действий:
async / await:
let tpl = await getTemplate('path/to/template.html');
Обещания:
getTemplate('path/to/template.html')
.then(function doSomething(tpl) {
// Put your code here...
});
Полученный код достаточно прост, чтобы его можно было реализовать без особых усилийразными способами.На самом деле, у меня есть небольшой суперкласс, который обрабатывает его для меня, и все мои пользовательские элементы наследуются от него.Вместо этого вы можете использовать миксин, что я и делал в прошлом.
Тяжелая работа - это просто переворот в порядке, и даже это не очень сложно, если вы не используете тысячи компонентов.Вероятно, это может быть автоматизировано с очень небольшой работой.