Angular - Renderer

Posted by Tim Lin on 2019-01-25

在上一篇 @ViewChild && template #refs && ElementRef 提到如何使用 ElementRef 取得 dom element 並對其操作。
但如果你的程式是跨平台的話, 那就要用 Renderer

一樣要先取得 ElementRef

1
@ViewChild('email') email: ElementRef;

constructor 注入 Renderer

1
2
3
4
constructor(
private renderer: Renderer,
private cd: ChangeDetectorRef
) {}

改使用 Renderer 的方法

1
2
3
4
5
6
7
8
ngAfterViewInit() {
this.renderer.setElementAttribute(this.email.nativeElement, 'placeholder', 'Enter your email address');
this.renderer.setElementClass(this.email.nativeElement, 'email', true);
this.renderer.invokeElementMethod(this.email.nativeElement, 'focus');
// this.email.nativeElement.setAttribute('placeholder', 'Enter your email address');
// this.email.nativeElement.classList.add('email');
// this.email.nativeElement.focus();
}

即可以達到之前一樣的效果, 使用 Renderer 也可以避免直接操作 dom

Result

Reference