zoukankan      html  css  js  c++  java
  • [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 .

  • 相关阅读:
    SQL优化系列(三)- 用最少的索引获得最大的性能提升
    SQL优化系列(二)- 优化Top SQL
    SQL优化神器
    优化SQL之最快等价SQL
    ngnix反向代理导致请求头header中的信息丢失
    centos7安装docker
    (一)硬盘技术
    (四)存储行业基础知识
    (三)磁盘阵列技术
    硬盘的文件类型解释!
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5898545.html
Copyright © 2011-2022 走看看