Json-angularjs2 的 ld 脚本标签
Json-ld script tag for angularjs2
我正在努力在 angularjs2 中自动生成 jsonld 脚本,但是,我找到了 angularjs1 的解决方案。
有没有人有解决办法。
我发现了一些 "ugly" 但使用 "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 中测试了这段代码的输出,它按预期工作。
不使用管道的解决方案(比较干净的方式)
使用提供的this.sanitizer.bypassSecurityTrustHtmlhttps://angular.io/guide/security#sanitization-and-security-contexts
在模板中
<div [innerHtml]="jsonLDString"></div>
在component/directive
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);
}
我正在努力在 angularjs2 中自动生成 jsonld 脚本,但是,我找到了 angularjs1 的解决方案。 有没有人有解决办法。
我发现了一些 "ugly" 但使用 "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 中测试了这段代码的输出,它按预期工作。
不使用管道的解决方案(比较干净的方式)
使用提供的this.sanitizer.bypassSecurityTrustHtmlhttps://angular.io/guide/security#sanitization-and-security-contexts
在模板中
<div [innerHtml]="jsonLDString"></div>
在component/directive
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);
}