Angular2 自动从模板中删除 <script>
标签,以阻止人们将此功能用作 “穷人”加载程序。
这里的问题是脚本标签目前有更多的用途,而不仅仅是加载代码或其他脚本文件。将来也可能会引入围绕 <script>
标签的更多功能。
当前的一种用途是采用以下格式的 JSON-LD
<script type="application/ld+json">
{
"@context":"http://schema.org",
"@type":"HealthClub",
...
}
</script>
通常建议的解决方法是通过 ngAfterViewInit
挂钩 将脚本标签动态添加 到文档中,但这显然不是正确的 ng2 实践并且不会在服务器端工作,JSON-LD 显然需要能够做。
我们是否可以使用任何其他解决方法来在 angular2 模板中包含 <script>
标签(即使标签在浏览器中是惰性的),或者这是框架过于自以为是的情况?如果在angular2中无法解决这种情况,可能还有哪些其他解决方案?
原文由 Ian Belcher 发布,翻译遵循 CC BY-SA 4.0 许可协议
也许在这里聚会有点晚了,但由于上述答案不适用于 Angular SSR(例如
document is not defined
服务器端或document.createElement is not a function
),我决定编写一个版本适用于 Angular 4+, 在服务器和浏览器上下文中:组件实现
服务实施
注意:服务不能直接使用
Renderer2
。事实上,渲染元素 应该由 Component 完成。但是,您可能会发现自己处于想要在页面上自动创建 JSON-LDscript
标记的情况。例如,一种情况可能是在路线导航更改事件上调用此类功能。因此,我决定添加一个适用于Service
上下文的版本。