Utiliser Renderer dans Angular 4
Je comprends pourquoi il est conseillé d'utiliser le moteur de rendu au lieu de manipuler directement les DOM dans Angular2 projets. Cependant, je l'ai désinstallé, vider le cache, réinstallé, Nœud, Tapuscrit et l'angle-CLI plusieurs fois et j'obtiens toujours une erreur lorsque vous essayez d'injecter le moteur de Rendu.
import { Injectable, Renderer2 } from '@angular/core';
constructor(private renderer: Renderer2) {}
__zone_symbole__message: "Pas de fournisseur pour Renderer2!"
__zone_symbole__pile:"Erreur↵ à l'Erreur.ZoneAwareError
Quelqu'un a une idée de ce que je fais de mal?
source d'informationauteur Michael_Cloudbusting
Vous devez vous connecter pour publier un commentaire.
Selon vos importations
je soupçonne que vous êtes en train d'injecter
Renderer2
dans votre classe de service. Il ne fonctionnera pas. Vous ne pouvez pas injecterRenderer2
en service. Il doit travailler pour les composants et les services fournis au sein de la composante.Nous pouvons prendre un coup d'oeil au code source https://github.com/angular/angular/blob/4.0.1/packages/core/src/view/provider.ts#L363-L373
il vérifie seulement dans l'élément de l'injecteur de l'arbre. Et il n'y a pas d'autres endroits où ce jeton peut être fourni
De sorte que vous avez à passer
Renderer2
de composant de service lorsque vous appelez un service méthode https://github.com/angular/angular/issues/17824#issuecomment-311986129ou vous pouvez fournir un service au sein de la composante
Vous ne pouvez pas injecter
Renderer2
mais nous pouvons exécuterRendererFactory2
pour obtenirRenderer2
exemple à l'intérieur d'@Injectable()
service.Il y a la manière Angulaire à l'aide de l'interne dans les web workers, par exemple.
J'ai résolu le problème avec le code ci-dessous:
Paramètres de
RendererFactory2.createRenderer
méthode sont:hostElement
avec le typeany
type
avec le typeRendererType2|null
Vous pouvez voir que
(null, null)
paramètres sont ici:https://github.com/angular/angular/blob/e3140ae888ac4037a5f119efaec7b1eaf8726286/packages/core/src/render/api.ts#L129