Angular ElementRef詳解

一.爲何要用ElementRefjavascript

           Angular 的口號是 - "一套框架,多種平臺。同時適用手機與桌面 (One framework.Mobile & desktop.)",即 Angular 是支持開發跨平臺的應用,好比:Web 應用、移動 Web 應用、原生移動應用和原生桌面應用等。java

          爲了可以支持跨平臺,Angular 經過抽象層封裝了不一樣平臺的差別,統一了 API 接口。如定義了抽象類 Renderer(已廢棄,如今用Renderer2) 、抽象類 RootRenderer 等。此外還定義瞭如下引用類型:web

            1. ElementRef;api

            2.TemplateRef;瀏覽器

            3.ViewRef ;框架

            4.ComponentRef ;函數

            5.ViewContainerRef ;this

二.ElementRef有什麼做用spa

           在應用層直接操做 DOM,就會形成應用層與渲染層之間強耦合,致使咱們的應用沒法運行在不一樣環境,如 web worker 中,由於在 web worker 環境中,是不能直接操做 DOM。有興趣的讀者,能夠閱讀一下 Web Workers 中支持的類和方法這篇文章。經過                 ElementRef 咱們就能夠封裝不一樣平臺下視圖層中的 native 元素 (在瀏覽器環境中,native 元素一般是指 DOM 元素),最後藉助於 Angular 提供的強大的依賴注入特性,咱們就能夠輕鬆地訪問到 native 元素。code

三.如何使用ElementRef

          先看需求:咱們要實現一個組件成功加載另外一個組件(本文中是遮罩的組件)並渲染完成後,改變遮罩文字層div的樣式,接下來請看我是如何實現的;

          1.引入相關api

import {Component, OnInit, Input, Output, EventEmitter, AfterViewInit, ElementRef, ViewChild, Renderer2} from '@angular/core';

         2.構造函數依賴注入

constructor( private elementRef: ElementRef,
              private renderer: Renderer2) {
  }

       3.使用屬性裝飾符@ViewChild

<div class="contents" [innerHTML]="content | translate" #divContent>
</div>

   

@ViewChild('divContent') greetDiv: ElementRef;

      4.設置相關樣式

ngAfterViewInit() {
    this.renderer.setStyle(this.greetDiv.nativeElement, 'width', '3.60rem');
}
相關文章
相關標籤/搜索