码迷,mamicode.com
首页 > 其他好文 > 详细

[Angular 2] ElementRef, @ViewChild & Renderer

时间:2016-09-23 06:32:50      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

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 .

 

[Angular 2] ElementRef, @ViewChild & Renderer

标签:

原文地址:http://www.cnblogs.com/Answer1215/p/5898545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!