angularjs2的Json-ld脚本标记

时间:2016-07-05 03:45:00

标签: angular json-ld

我正在努力在angularjs2中自动生成jsonld脚本,但是,我找到了angularjs1的解决方案。 有没有人有解决方案。

2 个答案:

答案 0 :(得分:3)

不使用管道的解决方案(有点干净)

使用 this.sanitizer.bypassSecurityTrustHtml 提供https://angular.io/guide/security#sanitization-and-security-contexts

在模板中

<div [innerHtml]="jsonLDString"></div>

在组件/指令

  private jsonld: any;
  public jsonLDString: any;

   private setJsonldData() {
        this.jsonld = {
          '@context': 'http://schema.org/',
          '@type': 'Service',
          'name': this.providerName,
          'description': this.providerDescription,
          'aggregateRating': {
            '@type': 'AggregateRating',
            'ratingValue': '3',
            'bestRating': '5',
            'ratingCount': '3'
          },
          'url' : this.providerUrl
        };
        this.jsonLDString = '<script type="application/ld+json">' + JSON.stringify(this.jsonld) + '</script>';
        this.jsonLDString  = this.sanitizer.bypassSecurityTrustHtml(this.jsonLDString);
      }

答案 1 :(得分:2)

我发现有点“丑陋”但使用“safeHtml”管道的工作解决方案:

import {Pipe, PipeTransform} from '@angular/core';
import {DomSanitizer, SafeHtml} from '@angular/platform-browser';

@Pipe({name: 'safeHtml'})
export class SafeHtmlPipe implements PipeTransform {
    constructor(protected sanitized:DomSanitizer) {
    }

    transform(value:any):SafeHtml {
        return this.sanitized.bypassSecurityTrustHtml(value);
    }
}

通过与Angular Universal一起使用,您可以插入任何脚本代码:

<div [innerHtml]="'<script type=\'application/ld+json\'>' + jsonLdStringifiedObj + '</script>' | safeHtml"></div>

我已经在Google Structured Data Testing Tool中测试了此代码的输出,它的效果与预期的一样。