無(wú)法在ngAfterViewInit之后獲取到DOM元素

最近碰到一個(gè)Angular中無(wú)法獲取DOM進(jìn)行實(shí)例化的問(wèn)題:記錄一下

項(xiàng)目使用Project Clarity框架,父組件中包含子組件,父組件中用彈框控制子組件的顯示和隱藏,當(dāng)彈框顯示時(shí),ng讀到父組件中的子組件,然后進(jìn)行加載渲染跨细,但是TS的執(zhí)行在DOM渲染完成之后,因?yàn)槲以噲D在ngAfterViewInit中獲取DOM元素河质,用getElementById取到的值居然是null冀惭,而getElementsByClassName獲取到對(duì)象,但是用數(shù)組方式訪問(wèn)時(shí)卻不識(shí)別掀鹅,百思不得其解

image.png

image.png

通過(guò)Debug我發(fā)現(xiàn)散休,當(dāng)子組件TS執(zhí)行時(shí),父組件頁(yè)面中的DOM并未加載出來(lái)乐尊,我使用定時(shí)器延遲之后就可以了戚丸,剛開(kāi)始我以為是ngIf 的問(wèn)題導(dǎo)致了這個(gè)執(zhí)行順序錯(cuò)誤,


image.png

為了解決這個(gè)問(wèn)題扔嵌,我另外寫(xiě)了個(gè)demo限府,父組件控制子組件的顯示,但是demo中并未出現(xiàn)項(xiàng)目中的問(wèn)題痢缎,我可以在ngAfterViewInit中獲取到子組件的DOM胁勺,因此我判斷是Project Clarity框架的原因,他的彈框使得DOM的加載慢了一點(diǎn)

image.png

image.png

但是使用ElementRef可以獲取到在框架中獲取不到的DOM独旷,但是因?yàn)轫?xiàng)目邏輯問(wèn)題署穗,這個(gè)方法并不能解決我的問(wèn)題


image.png

問(wèn)題找到了寥裂,但是沒(méi)有解決,很郁悶案疲!



總結(jié)整理一下收獲:主要是ng中獲取DOM元素的方法

  • 如果子組件的ID是動(dòng)態(tài)由父組件傳遞的封恰,在ngOnInit中獲取不到DOM,因?yàn)閚gOnInit在DOM渲染之前
console.log(document.getElementById(`${this.mapId}`));//null
  • 使用模版引用變量配合Viewchild可以獲取到DOM元素
  • 使用ElementRef對(duì)象可以獲取當(dāng)前組件模版中DOM元素
<div *ngIf="isShow">
  <app-zwf [mapId]="mapId"></app-zwf>
</div>
<button (click)="isShow=!isShow">顯示zwf</button>
<div #open>
  模版引用變量
</div>
import { Component, OnInit, Input, ViewChild, TemplateRef, ElementRef, AfterViewInit } from '@angular/core';

@Component({
  selector: 'app-zwf',
  templateUrl: './zwf.component.html',
  styleUrls: ['./zwf.component.css']
})
export class ZwfComponent implements OnInit, AfterViewInit {
  @ViewChild('open') open: TemplateRef<any>;
  @Input() mapId;
  // mapId = "open";
  constructor(private el: ElementRef) { }

  ngOnInit() {
    // console.log(this.mapId);
    // console.log(document.getElementById(`${this.mapId}`));
    console.log(this.open);
    // console.log(this.el);
    console.log(this.el.nativeElement.querySelector('.d1'));
    // this.el.nativeElement.querySelector('.d1').setAttribute('id', `${this.mapId}`)
    console.log(document.getElementById(`${this.mapId}`));//null
    console.log(document.getElementsByClassName('d1'));
  }
  ngAfterViewInit() {
    console.log(document.getElementById(`${this.mapId}`));
    console.log(document.getElementsByClassName('d1'));
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末褐啡,一起剝皮案震驚了整個(gè)濱河市诺舔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌春贸,老刑警劉巖混萝,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遗遵,死亡現(xiàn)場(chǎng)離奇詭異萍恕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)车要,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)允粤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人翼岁,你說(shuō)我怎么就攤上這事类垫。” “怎么了琅坡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵悉患,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我榆俺,道長(zhǎng)售躁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任茴晋,我火速辦了婚禮陪捷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诺擅。我一直安慰自己市袖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布烁涌。 她就那樣靜靜地躺著苍碟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撮执。 梳的紋絲不亂的頭發(fā)上驰怎,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音二打,去河邊找鬼县忌。 笑死掂榔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的症杏。 我是一名探鬼主播装获,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼厉颤!你這毒婦竟也來(lái)了穴豫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逼友,失蹤者是張志新(化名)和其女友劉穎精肃,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帜乞,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡司抱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黎烈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片习柠。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖照棋,靈堂內(nèi)的尸體忽然破棺而出资溃,到底是詐尸還是另有隱情,我是刑警寧澤烈炭,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布溶锭,位于F島的核電站,受9級(jí)特大地震影響符隙,放射性物質(zhì)發(fā)生泄漏趴捅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一膏执、第九天 我趴在偏房一處隱蔽的房頂上張望驻售。 院中可真熱鬧,春花似錦更米、人聲如沸欺栗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)迟几。三九已至,卻和暖如春栏笆,著一層夾襖步出監(jiān)牢的瞬間类腮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工蛉加, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚜枢,地道東北人缸逃。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像厂抽,于是被迫代替她去往敵國(guó)和親需频。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 組件基礎(chǔ) 組件用來(lái)包裝特定的功能筷凤,應(yīng)用程序的有序運(yùn)行依賴于組件之間的協(xié)同工作昭殉。組件是angular應(yīng)用的最小邏輯單...
    oWSQo閱讀 1,368評(píng)論 0 0
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評(píng)論 1 92
  • 前端開(kāi)發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化藐守,入門(mén)級(jí)到專家級(jí)挪丢,廣度和深度都會(huì)有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,574評(píng)論 0 7
  • 一.課程簡(jiǎn)介 (注意:這里的AngularJS指的是2.0以下的版本) AngularJS的優(yōu)點(diǎn): 模板功能強(qiáng)大豐...
    壹點(diǎn)微塵閱讀 911評(píng)論 0 0
  • 1卢厂、什么是react React.js 是一個(gè)幫助你構(gòu)建頁(yè)面 UI 的庫(kù)乾蓬。React.js 將幫助我們將界面分成了...
    谷子多閱讀 2,555評(píng)論 1 13