seo-service.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';
  2. @Injectable({providedIn: 'root'})
  3. export class SeoService {
  4. private renderer: Renderer2;
  5. private data: Object = {};
  6. private modeSet: boolean = false;
  7. private modeSingle: boolean = true;
  8. constructor(private rendererFactory: RendererFactory2) {
  9. this.renderer = this.rendererFactory.createRenderer(null, null);
  10. this.set("@context", "https://schema.org/");
  11. }
  12. /**
  13. * Sets the service to insert
  14. */
  15. setModeSingle(){
  16. if (this.modeSet){
  17. console.log("The mode is already set to " + (this.modeSingle ? "SINGLE" : "MULTIPLE"));
  18. }
  19. this.modeSingle = true;
  20. this.modeSet = true;
  21. Object.defineProperty(this.data, 'mainEntity', { value: {}, writable: true });
  22. }
  23. setModeMultiple(){
  24. if (this.modeSet){
  25. console.log("The mode is already set to " + (this.modeSingle ? "SINGLE" : "MULTIPLE"));
  26. }
  27. this.modeSingle = false;
  28. this.modeSet = true;
  29. Object.defineProperty(this.data, 'mainEntity', { value: {}, writable: true });
  30. }
  31. set(key: string, value: string){
  32. Object.defineProperty(this.data, key, { value: value, writable: true });
  33. }
  34. render() {
  35. const script = this.renderer.createElement('script');
  36. script.type = 'application/ld+json';
  37. script.text = JSON.stringify(this.data);
  38. this.renderer.appendChild(document.head, script);
  39. }
  40. }