Я новичок в Angular, и я пытался создать свою собственную директиву, используя две опции:
- Вариант 1: Прямой доступ к элементам, используя ElementRef
- Вариант 2:Использование Renderer2
Вариант 1:
import { Directive, ElementRef, OnInit } from '@angular/core';
@Directive({
selector: '[appBasicHighlight]'
})
export class BasicHighlightDirective implements OnInit {
constructor(private elementRef: ElementRef) {}
ngOnInit() {
this.elementRef.nativeElement.style.backgroundColor = 'green';
}
}
Вариант 2:
import { Directive, ElementRef, Renderer2, OnInit } from '@angular/core';
@Directive({
selector: '[appBetterHighlight]'
})
export class BetterHighlightDirective {
constructor(private elementRef: ElementRef, private renderer: Renderer2) { }
ngOnInit() {
this.renderer.setStyle(this.elementRef.nativeElement, 'background-color', 'blue');
}
}
Инструктор из учебного пособия сказал, что это намного безопаснее, и рекомендуетсяиспользуйте Renderer через прямой доступ, но не объясните явно причины.Он имел в виду прямой доступ к DOM с использованием ElementRef, но, как видно из кода, Renderer также использовал ElementRef.Из-за этого я запутался в том, что делает Renderer более безопасным и выгодным по сравнению с ElementRef.