欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Angular2進(jìn)階之如何避免Dom誤區(qū)

 更新時間:2018年04月02日 14:14:07   作者:常銀玲-Judy  
這篇文章主要介紹了Angular2進(jìn)階之如何避免Dom誤區(qū),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

Angular2的設(shè)計目標(biāo)本來就是要讓瀏覽器和DOM獨立。DOM是復(fù)雜的,因此使組件與它分離,會讓我們的應(yīng)用程序,更容易測試和重構(gòu)。為了支持跨平臺,Angular還通過抽象封裝了不同平臺的差異。

內(nèi)容

1.為什么不能直接操作DOM?

Angular2采用AOT靜態(tài)編譯模式,這種形式下需要我們的模板類型必須是穩(wěn)定和安全的,直接使用javascript和jquery語言是不穩(wěn)定,因為他們的編譯不會提前發(fā)現(xiàn)錯誤,所以angular2才會選擇javascript的超集typescript語言(這種語言編譯期間就能發(fā)現(xiàn)錯誤)。 

2.三種錯誤操作DOM的方式:

@Component({ ... })
export class HeroComponent {
 constructor(private _elementRef: ElementRef) {}

 doBadThings() {
  $('id').click(); //jquery
  this._elementRef.nativeElement.xyz = ''; //原生的ElementRef
  document.getElementById('id'); //javascript
 }
}

3.Angular2如何DOM操作的機(jī)制?

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

4.正確操作DOM的方式(ElementRef和Renderer2):

product.component.html

<div>商品信息</div>
<ul>
 <li *ngFor="let product of dataSource| async as list">
  {{product.title}}
 </li>
</ul>
<div #dia>
</div>

product.component.ts

import { Component, OnInit,Renderer2, ViewChild,ElementRef,AfterViewInit} from '@angular/core';
@Component({
 selector: 'app-product',
 templateUrl: './product.component.html',
 styleUrls: ['./product.component.css']
})

export class ProductComponent implements OnInit,AfterViewInit {
 @ViewChild('dia') dia:ElementRef ;定義子試圖
 ngOnInit() {
 /**1.
 *創(chuàng)建一個文本
 */
  this.dia.nativeElement.innerHTML="這只是一個測試的文檔";

 /**2.
  *添加click事件
  */
 let ul=this.element.nativeElement.querySelector('ul');
  this.render2.listen(ul,"click",()=>{
   this.render2.setStyle(ul,"background","blue");

ngAfterViewInit(){
/**3.
 *修改背景顏色
 */
 let li=this.element.nativeElement.querySelector('ul');
 this.render2.setStyle(li,"background","red");
 }
}

總結(jié)

學(xué)習(xí)一種語言其實我們首先應(yīng)該去遵循他的規(guī)范,接受他和之前語言的不同之處,然后再去深入理解和之前的方式不一樣在哪里,為什么這么做,否則我們無法理解這種語言的妙處,希望對你有幫助!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • angular中的post請求處理示例詳解

    angular中的post請求處理示例詳解

    這篇文章主要給大家介紹了關(guān)于angular中post請求處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用angular具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • AngularJS的內(nèi)置過濾器詳解

    AngularJS的內(nèi)置過濾器詳解

    在我們開發(fā)中經(jīng)常需要在頁面顯示給用戶的信息需要一定處理格式化,才能顯示給用戶。在angularjs中為我們提供了叫filter的指令,讓我們能夠很輕易就能做到著一些列的功能,angularjs內(nèi)部為我們提供了number等很多內(nèi)置的filter。
    2015-05-05
  • Angular的模塊化(代碼分享)

    Angular的模塊化(代碼分享)

    本文主要對Angular的模塊化進(jìn)行案例分析介紹,具有一定的參考價值,下面跟著小編一起來看下吧
    2016-12-12
  • 詳解Angular CLI + Electron 開發(fā)環(huán)境搭建

    詳解Angular CLI + Electron 開發(fā)環(huán)境搭建

    本篇文章主要介紹了Angular CLI + Electron 開發(fā)環(huán)境搭建,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • AngularJs返回前一頁面時刷新一次前面頁面的方法

    AngularJs返回前一頁面時刷新一次前面頁面的方法

    今天小編就為大家分享一篇AngularJs返回前一頁面時刷新一次前面頁面的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Angular實現(xiàn)表單驗證功能

    Angular實現(xiàn)表單驗證功能

    這篇文章主要為大家詳細(xì)介紹了Angular實現(xiàn)表單驗證功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 基于?angular?material?theming?機(jī)制修改?mat-toolbar?的背景色(示例詳解)

    基于?angular?material?theming?機(jī)制修改?mat-toolbar?的背景色(示例詳解

    最近在學(xué)習(xí)?angular,記錄一下昨天的進(jìn)展,解決的問題是通過?theme?的配置修改?mat-toolbar?的背景色,避免對色彩的硬編碼,這篇文章主要介紹了基于?angular?material?theming?機(jī)制修改?mat-toolbar?的背景色,需要的朋友可以參考下
    2022-10-10
  • angular共享依賴的解決方案分享

    angular共享依賴的解決方案分享

    這篇文章主要給大家介紹了關(guān)于angular共享依賴解決方案的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Angularjs cookie 操作實例詳解

    Angularjs cookie 操作實例詳解

    本文給大家分享Angularjs cookie 操作實例詳解,demo案例分析,感興趣的朋友參考下吧
    2017-09-09
  • Angular2下使用pdf插件的方法詳解

    Angular2下使用pdf插件的方法詳解

    這篇文章主要給大家介紹了在Angular2下使用pdf插件的方法,使用這個插件是要實現(xiàn)一個pdf顯示的功能,文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04

最新評論