2016-07-05 27 views
5

Non riesco a generare automaticamente lo script jsonld in angularjs2, tuttavia ho trovato una soluzione per angularjs1. Qualcuno ha una soluzione per questo.Tag script JSON-ld per angularjs2

+0

visita 'http://stackoverflow.com/questions/35332430/angularjs-script-tag-json-ld/35333500#35333500' – AK1

+0

Ciao grazie per la tua risposta, ma questa soluzione è per angularjs1 non per la versione 2 che è completamente diversa . –

+0

trovato ancora qualcosa? – Nicky

risposta

2

Ho trovato un po ' "brutto", ma la soluzione di lavoro utilizzando pipe "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); 
    } 
} 

Utilizzando in tandem con il Angular Universal, è possibile inserire qualsiasi codice di script:

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

Ho testato l'output di questo codice nel Google Structured Data Testing Tool e funziona come previsto.

+0

Ho lo stesso problema. potresti spiegare come risolvere questo problema? Per favore controlla questo link https://stackoverflow.com/questions/44389546/schema-not-detected-in-google-structured-data-testing-tool – vel

+0

@vel, devi prerenderare la tua applicazione angolare su un server web usando Angular Universale affinché lo strumento di test dei dati strutturati di Google sia in grado di analizzare il codice HTML che include i dati strutturati. Vedere l'esempio [progetto di avvio] (https://github.com/robwormald/ng-universal-demo). – tooleks

+0

Ho provato con universale angolare. Ma non posso usare Ng build --prod. Questo è il problema. Come risolvere questo? – vel

1

soluzione senza l'utilizzo di un tubo (modo un po 'pulito)

Utilizzare il this.sanitizer.bypassSecurityTrustHtml fornito https://angular.io/guide/security#sanitization-and-security-contexts

Nel modello

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

Nel componente/direttiva

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); 
     }