javascript – 在Angular2组件模板中添加脚本标签

前端之家收集整理的这篇文章主要介绍了javascript – 在Angular2组件模板中添加脚本标签前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Angular2删除< script>标签自动从模板中停止使用此功能的人员作为 “poor’s man” loader.

这里的问题是脚本标签目前具有比仅加载代码或其他脚本文件更多的用途.围绕< script>的进一步的功能是可能的标签也将在未来引入.

目前使用的一种是采用格式的JSON-LD

<script type="application/ld+json">
{
    "@context":"http://schema.org","@type":"HealthClub",...
}
</script>

通常建议的工作是通过ngAfterViewInit钩子到文档dynamically add script tags,但这显然不是正确的ng2实践,不会在服务器端工作,哪个JSON-LD显然需要做.

是否有任何其他解决方法,我们可以使用它来包括< script>在角度2模板中的标签(即使标签在浏览器中是惰性的)还是框架太过分了?如果这种情况在角度2中无法解决,还有哪些其他解决方案可能存在?

解决方法

也许在这里的晚会有点晚了,但是由于上述答案对于Angular SSR(例如,文档没有定义,服务器端或document.createElement不是函数),我决定写一个适用于Angular的版本4,在服务器和浏览器上下文中:

组件实现

import { Renderer2,OnInit,Inject } from '@angular/core';
import { DOCUMENT } from '@angular/platform-browser';

class MyComponent implements OnInit {

    constructor(private _renderer2: Renderer2,@Inject(DOCUMENT) private _document) {

    }

    public ngOnInit() {

        let s = this._renderer2.createElement('script');
        s.type = `application/ld+json`;
        s.text = `
            {
                "@context": "https://schema.org"
                /* your schema.org microdata goes here */
            }
        `;

        this._renderer2.appendChild(this._document.body,s);
    }
}

服务实施

注意:服务不能直接使用Renderer2.实际上,渲染元素应该由一个Component完成.但是,您可能会发现自己想要在页面自动创建JSON-LD脚本标签.情况可能是在路线导航更改事件上调用功能.因此,我决定添加一个在服务环境中工作的版本.

import { Renderer2,Inject } from '@angular/core';
import { DOCUMENT } from '@angular/platform-browser';

class MyService {

    constructor(@Inject(DOCUMENT) private _document) {

    }

    /**
     * Set JSON-LD Microdata on the Document Body.
     *
     * @param renderer2             The Angular Renderer
     * @param data                  The data for the JSON-LD script
     * @returns void
     */
    public setJsonLd(renderer2: Renderer2,data: any): void {

        let s = renderer2.createElement('script');
        s.type = `application/ld+json`;
        s.text = `${JSON.stringify(data)}`;

        renderer2.appendChild(this._document.body,s);
    }
}

猜你在找的JavaScript相关文章