2017-12-05 6 views
-1

Ich versuche Renderer2 in meinen benutzerdefinierten Dienst injizieren zu injizieren und es ist mit dem Fehler Fehler wie folgt:Wie Renderer2 in benutzerdefinierten Dienst in Angular 4

ERROR Error: StaticInjectorError[Renderer2]: 
    StaticInjectorError[Renderer2]: 
    NullInjectorError: No provider for Renderer2! 

Es ist ein brandneue Winkel App erstellt cli mit und meine benutzerdefinierten Service, den ich erstellt ist:

import { Injectable, Renderer2 } from '@angular/core'; 

@Injectable() 
export class FontsService { 

    constructor(private renderer: Renderer2) { 
    console.log(this.renderer); 
    } 

    getFonts() { 
    return 'Ubuntu'; 
    } 

} 

Und app.module ist sehr einfach nur die Bereitstellung des neu erstellten Dienstes:

Hilfe bitte?

Vielen Dank.

+1

https://github.com/angular/angular/issues/17824 im letzten Kommentar „aussehen, wenn ich Renderer2 sehen können in Diensten nicht funktionieren und arbeiten in Komponenten (in Angular 4.4.5). " Vielleicht einfach nur direkt in der Komponente verwenden? – NicoLA

+0

Nun, ich verwende diesen Dienst, um ein Link-Tag zu erstellen und dieses Link-Tag in den Kopf einzufügen, nachdem der Benutzer eine bestimmte Schriftart ausgewählt hat. Ich brauche diese Funktionalität an mehreren Stellen, daher scheint der Service eine gute Option zu sein. Leider funktioniert Renderer2 mit Methoden zum Zugriff auf Dom nicht im Custom Service. – Venkat

+2

wäre es möglich, dies stattdessen als Richtlinie zu verwenden? –

Antwort

-1

Es gibt den Weg, den Angular intern zB in Webworkern verwendet.

import { Renderer2, RendererFactory2 } from '@angular/core'; 

@Injectable() 
class Service { 
    private renderer: Renderer2; 

    constructor(rendererFactory: RendererFactory2) { 
     this.renderer = rendererFactory.createRenderer(null, null); 
    } 
} 

Parameter der RendererFactory2.createRenderer Methode sind:

  • hostElement mit Typ any
  • type mit Typ RendererType2|null

Ich habe das Problem mit dem Code unten gelöst

können Sie sehen, dass (null, null) Parameter sind hier: https://github.com/angular/angular/blob/e3140ae888ac4037a5f119efaec7b1eaf8726286/packages/core/src/render/api.ts#L129

+1

Bitte seien Sie vorsichtig bei der Verlinkung mit Ihren eigenen Inhalten auf verschiedenen Seiten, Sie möchten kein [Spammer] sein (// stackoverflow.com/help/promotion). Sie sollten hier den Großteil des Inhalts einbeziehen und den Link nur als Referenz verwenden. –

+0

@ chade_ Sie haben Recht. Mein erster Gedanke war, einen Link zu geben, um mehr Informationen über den Blog-Post zu geben, aber nach Ihrem Kommentar habe ich erkannt, wie es von Reader-Seite aussieht. – huncode

Verwandte Themen