La différence entre le Convertisseur et ElementRef angulaire 2
Quelle est la différence entre Renderer
et ElementRef
? Dans Angulaire deux sont utilisés pour la Manipulation du DOM. Je suis actuellement en utilisant ElementRef
seul pour l'écriture Angulaire 2 directives. Si j'obtiens plus d'infos sur Renderer
, je peux utiliser dans mes futures directives.
OriginalL'auteur Niyaz | 2016-09-30
Vous devez vous connecter pour publier un commentaire.
La
Renderer
est une classe qui est une abstraction partielle sur le modèle DOM.À l'aide de la
Renderer
pour manipuler le DOM ne casse pas rendu côté serveur ou Web workers (lorsque l'accès direct vers les DOM casser).ElementRef
est une classe qui peut contenir une référence à un élément du DOM.C'est encore une abstraction pour ne pas casser dans des environnements où les navigateurs DOM n'est pas réellement disponible.
Si
ElementRef
est injecté à un composant, l'instance injectée est une référence à l'élément hôte du composant en cours.Il y a d'autres façons d'acquérir un
ElementRef
instance comme@ViewChild()
,@ViewChildren()
,@ContentChild()
,@ContentChildren()
. Dans ce casElementRef
est une référence à l'élément correspondant(s) dans le modèle ou les enfants.Renderer
etElementRef
ne sont pas "ceci ou cela", mais au contraire, ils doivent être utilisés pour obtenir la pleine plate-forme de l'abstraction.Renderer
agit sur le DOM etElementRef
est une référence à un élément dans le DOM de laRenderer
agit sur les.elementRef.nativeElement
au lieu de travailler avecelementRef
commeviewContainerRef
. Cela semble être un peu incohérent. Des idées?Il semble incohérent, mais je pense qu'il ne l'est pas. Dans les anciennes versions bêta
renderer
juste prisElementRef
mais ils l'ont changé plus tard. Je pense que dans les plates-formes commeUniversal
ElementRef.nativeElement
ne fait pas référence à un élément du DOM. Si vous cochez la case angular.io/docs/ts/latest/api/core/index/ElementRef-class.html vous verrez quenativeElement
est de typeany
au lieu deHTMLElement
Dans les anciennes versions bêta convertisseur a juste pris ElementRef mais ils l'ont changé plus tard. - c'est intéressant, merci. ouais,
nativeElement
pouvez vous référer à la plate-forme des éléments spécifiques, mais le passage elementRef au lieu de elementRef.nativeElement est encore un niveau d'abstraction plus et de toute façonJe ne me souviens pas avoir vu une raison mentionnée pourquoi ils l'ont changé.
Viens de vérifier les sources, existant rendu est depracated dans les versions les plus récentes.
OriginalL'auteur Günter Zöchbauer
Faire remarquer que vous devriez vous abstenir d'utiliser ElementHref comme comportant un risque pour la sécurité.
Angulaire 2 Documentation:
"Permettant un accès direct vers les DOM peut rendre votre application plus vulnérables aux attaques XSS. Examiner attentivement toute utilisation de ElementRef dans votre code. Pour plus de détails, voir le Guide de Sécurité."
"Utilisation de cette API comme le dernier recours lorsque l'accès direct à DOM est nécessaire. L'utilisation de gabarits et de liaison de données fournies par Angulaire à la place. Alternativement, vous pouvez prendre un coup d'oeil au moteur de Rendu qui fournit une API qui peut en toute sécurité être utilisé même lorsque l'accès direct à l'élément natal n'est pas pris en charge."
ElementRef
lui-même ne fait pas de mal. Le coupable estElementRef.nativeElement
. C'est à mon humble avis (je suis tout sauf un expert en sécurité) seulement pertinentes pour la sécurité si l'utilisateur a fourni des données est utilisé pour ajouter de la cathédrale, à droite?OriginalL'auteur Omri L