没有直接的方法可以做到这一点。
这通常是服务器端任务:服务器负责生成所需的 HTML。
Web 组件都是关于客户端的,因此它们处理已经交付给浏览器的内容。
但是,build.dart
每次项目中的文件更改时都会执行脚本,因此您可以扩展脚本以获得所需的内容。我认为这不是一个好方法,但它可以解决您的问题。
首先将以下占位符添加到目标 html 文件(在我的例子中web/webuitest.html
):
<header></header>
现在header.html
向您的项目添加一个包含一些内容的文件:
THIS IS A HEADER
现在扩展build.dart
脚本,以便检查是否header.html
已修改,如果是,它将更新webuitest.html
:
// if build.dart arguments contain header.html in the list of changed files
if (new Options().arguments.contains('--changed=web/header.html')) {
// read the target file
var content = new File('web/webuitest.html').readAsStringSync();
// read the header
var hdr = new File('web/header.html').readAsStringSync();
// now replace the placeholder with the header
// NOTE: use (.|[\r\n])* to match the newline, as multiLine switch doesn't work as I expect
content = content.replaceAll(
new RegExp("<header>(.|[\r\n])*</header>", multiLine:true),
'<header>${hdr}</header>');
// rewrite the target file with modified content
new File('web/webuitest.html').writeAsStringSync(content);
}
这种方法的一个后果是重写目标将build.dart
再次触发,因此输出文件将被构建两次,但这不是一个大问题。
当然,这可以做得更好,甚至有人可以将其包装到库中。