[Angular 2] ElementRef, @ViewChild & Renderer

ElementRef:

In Angular2 Doc, it suggest to "avoid" using ElementRef. It access DOM directly, can easily be attacked.

复制代码
import {Component, OnInit, ViewChild, Renderer, ElementRef} from '@angular/core';

@Component({
    moduleId: module.id,
    selector: 'widget-three',
    template: `<input type="text" #inputRef/>`
})
export class WidgetThree {

    constructor(private elm: ElementRef) {
        console.log("elm:", this.elm)

    }
}
   
复制代码

If we log out the ElementRef, we can see, it refer to host element.

 

Renderer:

In the doc, it also suggest, if you want to change some dom prop, use Renderer instead. ElementRef can be just a reference to access native element object.

import { Directive, ElementRef, Input, Renderer } from '@angular/core';
@Directive({ selector: '[myHighlight]' })
export class HighlightDirective {
    constructor(el: ElementRef, renderer: Renderer) {
       renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow');
    }
}

This will set the host element background as yellow.

 

@ViewChild():

Access Child element by Ref or Class Object.

复制代码
import {Component, OnInit, ViewChild, Renderer} from '@angular/core';

@Component({
    moduleId: module.id,
    selector: 'widget-three',
    template: `<input type="text" #inputRef/>`
})
export class WidgetThree {

    @ViewChild('inputRef') input;

    constructor(private renderer: Renderer) {
    }
    
    ngAfterViewInit(){
        this.renderer.invokeElementMethod(
            this.input.nativeElement,
            'focus',
            []
        );
    }
}
复制代码

Here we have a ref "inputRef", we use ref to access input element.

'invokeElementMethod' will call the 'focus' method the the input nativeElement which should be:

this.input.nativeElement.focus()

But the risk is on mobile it might have different method to focus on input, 'invokeElementMethod' can safely help us to call the method .

 

posted @   Zhentiw  阅读(4914)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示