国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Angular ElementRef簡介及其使用

2024-05-06 15:29:05
字體:
來源:轉載
供稿:網友

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

為了能夠支持跨平臺,Angular 通過抽象層封裝了不同平臺的差異,統一了 API 接口。如定義了抽象類 Renderer 、抽象類 RootRenderer 等。此外還定義了以下引用類型:ElementRef、TemplateRef、ViewRef 、ComponentRef 和 ViewContainerRef 等。

下面我們就來分析一下 ElementRef 類:

ElementRef 的作用

在應用層直接操作 DOM,就會造成應用層與渲染層之間強耦合,導致我們的應用無法運行在不同環境,如 web worker 中,因為在 web worker 環境中,是不能直接操作 DOM。有興趣的讀者,可以閱讀一下 [Web Workers 中支持的類和方法][1] 這篇文章。通過 ElementRef 我們就可以封裝不同平臺下視圖層中的 native 元素 (在瀏覽器環境中,native 元素通常是指 DOM 元素),最后借助于 Angular 提供的強大的依賴注入特性,我們就可以輕松地訪問到 native 元素。

ElementRef 的定義

// angular-master/packages/core/src/linker/element_ref.tsexport class ElementRef<T = any> { public nativeElement: T; constructor(nativeElement: T) { this.nativeElement = nativeElement; }}

ElementRef 的應用

我們先來介紹一下整體需求,我們想在頁面成功渲染后,獲取頁面中的 div 元素,并改變該 div 元素的背景顏色。接下來我們來一步步,實現這個需求。

首先我們要先獲取 div 元素,在文中 “ElementRef 的作用” 部分,我們已經提到可以利用 Angular 提供的強大的依賴注入特性,獲取封裝后的 native 元素。在瀏覽器中 native 元素就是 DOM 元素,我們只要先獲取 my-app元素,然后利用 querySelector API 就能獲取頁面中 div 元素。具體代碼如下:

import { Component, ElementRef } from '@angular/core';@Component({ selector: 'my-app', template: `  <h1>Welcome to Angular World</h1>  <div>Hello {{ name }}</div> `,})export class AppComponent { name: string = 'Semlinker'; constructor(private elementRef: ElementRef) {  let divEle = this.elementRef.nativeElement.querySelector('div');  console.dir(divEle); }}

運行上面代碼,在控制臺中沒有出現異常,但是輸出的結果卻是 null 。什么情況 ? 沒有拋出異常,我們可以推斷 this.elementRef.nativeElement 這個對象是存在,但卻找不到它的子元素,那應該是在調用構造函數的時候,my-app 元素下的子元素還未創建。

那怎么解決這個問題呢 ?沉思中… ,不是有 setTimeout 么,我們在稍微改造一下:

constructor(private elementRef: ElementRef) { setTimeout(() => { // 此處需要使用箭頭函數哈,你懂的...   let divEle = this.elementRef.nativeElement.querySelector('div');   console.dir(divEle);  }, 0);}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 龙泉市| 嘉黎县| 应城市| 河津市| 拉孜县| 辽阳市| 吕梁市| 论坛| 舞阳县| 阳春市| 济阳县| 定陶县| 峨眉山市| 罗源县| 辽阳县| 库伦旗| 扬中市| 封丘县| 满城县| 车致| 贞丰县| 胶州市| 阜新| 龙南县| 敖汉旗| 尖扎县| 安达市| 乌兰浩特市| 澄城县| 平湖市| 昌宁县| 彝良县| 孟津县| 定安县| 始兴县| 贵州省| 临高县| 修文县| 阿鲁科尔沁旗| 扬州市| 塘沽区|