日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Angular2视图操作之ViewChildViewChildren

發布時間:2025/7/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Angular2视图操作之ViewChildViewChildren 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

熟悉Angular1.X版本的同學應該知道,Angular1.X在指令中的link函數中提供了element參數,讓我們可以對元素的原生dom進行獲取和操作,在新版本的Angular中,則以decorator的形式,提供了ViewChild,ViewChildren,以及對應的ContentChild和ContentChildren讓我們可以獲取元素的dom對象,本文講解較為常用的ViewChild和ViewChildren這兩個decorator

注意:使用時需要從@angular/core中引入ViewChild和ViewChildren

ViewChild:

ViewChild可以獲取到當前組件視圖中的單個元素,獲取方式有兩種:

第一種(通過模板引用變量):

<main #mychild><!-- my html content --> </main> @ViewChild('mychild') myChild : ElementRefconstructor() { }ngAfterViewInit() {console.log(this.myChild)}

第二種(直接指定組件類):

<my-child></my-child> @Component({selector: 'my-child',templateUrl: './xxxxx.html'}) class ChildComponent {constructor() { } } @ViewChild() myChild : ChildComponent;ngAfterViewInit() {console.log(this.myChild)}

這兩種方式有何區別呢?

區別在于,第一種方式取得的mychild變量是經過包裝的,他是一個ElementRef類,其中包含了nativeElement這個屬性,這個屬性的值就相當于通過原生dom操作取得的element。打印結果如下圖:

而如果通過第二種方式,我們需要為組件類注入ElementRef,才能夠取得nativeElement,如下:

//先引入ElementRef //import {ElementRef} from '@angular/core'; @Component({selector: 'my-child',templateUrl: './xxxxx.html'}) class ChildComponent {constructor(public ele: ElementRef) { } }

注意,為ChildComponent實例化ElementRef時,需要用public標識符,private的話會導致外部無法取得該ele變量(那你就得專門為其實現一個get方法)

這時,我們就能通過this.mychild.ele.nativeElement來取得其DOM元素了

ViewChildren:

?對應的,ViewChildren,顧名思義是可以獲得一個視圖集合,它是一個類數組的形式,使用方式與ViewChild相似,但需要以QueryList的形式存在:

@ViewChildren(ChildComponent) myChild : QueryList<ChildComponent>;ngAfterViewInit() {console.log(this.myChild) }

QueryList是個什么概念?

我們看看官方文檔的解釋:

我看不懂英文,總的來說就是一個結果集,這個結果集在你的Angular應用更新完成時也隨之更新,

但里面的結果是不可以直接訪問和修改的(很合理)。

我們先來看看打印出來的ViewChildren實例長啥樣:

可以發現我們想要的取得的結果--(_results)屬性,然而這個_results屬性是private的,我們無法直接取得(經實踐可以通過mychild['_results']的方法來獲取,但這也已經超出了ts的范圍,也是不安全的做法,應該杜絕),但我們有兩種方式可以遍歷這個_results數組:

第一是通過mychild.forEach()方法,第二是先調用QueryList原型中的toArray()方法,接著再用數組的方式進行處理

監聽視圖變化:

假設我們有一個由多個my-child組成列表,它可以添加或移除my-child組件,我們希望在my-child集合被改動時都做出回應,此時Observable就派上用場了,QueryList為我們提供了一個changes的Observable:

我們只需要訂閱它就可以完成這個需求了:

this.mychild.changes.subscribe((data)=>{// do something})

?

細節:

為何是ngAfterViewInit?

注意到我們獲取mychild都是在ngAfterViewInit的生命周期鉤子函數中進行的(生命周期的流程詳見https://www.angular.cn/docs/ts/latest/guide/lifecycle-hooks.html#!#onchanges)

這是因為mychild是在ngAfterViewInit完成后才能獲取到值,所以也可以在ngAfterViewChecked中獲取,但前者是最快能獲取到的地方,所以在ngAfterViewInit之前的階段,比如ngOnInit,ngOnChanges都是無法獲取到的

還有其他細節?歡迎評論補充,我會盡量完善。

轉載于:https://my.oschina.net/u/2342955/blog/882473

總結

以上是生活随笔為你收集整理的Angular2视图操作之ViewChildViewChildren的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 少妇精品偷拍高潮白浆 | 中文字幕欲求不满 | 人人爽人人爽人人片av | 国产视频在线观看视频 | 一级黄色视 | 日产毛片| 2022av视频 | 伊人焦久影院 | 精品一区二区中文字幕 | 国产又爽又黄的视频 | 中文字幕不卡在线播放 | www.199麻豆 | 制服丝袜第二页 | 原创真实夫妻啪啪av | 九九视频网 | 阿v天堂2017 欧美小视频在线观看 | 四虎影视www在线播放 | 国产精品国产一区二区三区四区 | 精品一区91 | 成人在线激情 | 国产一区二区三区精品愉拍 | 午夜影院入口 | 欧美在线视频一区 | 制服丝袜一区二区三区 | 熟女毛片 | 北条麻妃在线一区 | 国产美女免费网站 | 一级特黄肉体裸片 | 二区免费视频 | 久久国产精品久久久久久电车 | 老牛嫩草二区三区观影体验 | 奇米中文字幕 | 极品美女高潮出白浆 | 国产伦精品一区二区三区视频痴汉 | 亚洲人成久久 | 久久五月激情 | 91网址在线 | 青青毛片 | com国产 | 深爱开心激情 | 亚洲最大福利视频 | 精品国产自在精品国产精小说 | 在线观看黄网站 | 国产免费专区 | tube极品少妇videos | 亚洲精品成人无码 | 国产性av| 一级黄色片在线播放 | 乱lun合集小可的奶水 | 日本一区二区三区视频在线观看 | 国产精品一区二区三区四区五区 | 丁香七月激情 | 91丨九色丨蝌蚪丨丝袜 | 午夜免费影院 | 国产精品视频一区在线观看 | 亚洲av无码一区二区三区人 | 大地资源中文在线观看免费版 | 久久精品综合 | 欧美老熟妇喷水 | 妞干网这里只有精品 | 非洲黑人狂躁日本妞 | 欧美激情黄色 | 国产精品久久久久久免费观看 | 韩国性经典xxxxhd | 精品少妇一区二区三区免费观看 | 姐姐的秘密韩剧免费观看全集中文 | 午夜男人网 | 国产在线视频二区 | 国产手机看片 | 国产精品无码一区二区三 | 久久精品无码av | 男女激情大尺度做爰视频 | 国产成人无遮挡在线视频 | 黄色一级视频在线观看 | 97精品视频在线观看 | 蜜臀中文字幕 | 在线观看日韩一区二区 | 日本中文字幕免费观看 | 草草视频在线播放 | 免费午夜av | 日韩黄色一区 | 免费一级特黄3大片视频 | 善良的公与媳hd中文字 | 污视频免费网站 | 玩偶游戏在线观看免费 | 天天操夜夜添 | 亚洲精品网站在线播放gif | 午夜精品三级久久久有码 | 国产成人精品片 | 无码一区二区波多野结衣播放搜索 | 欧美整片在线观看 | 中文字幕av一区二区三区 | 黄色片毛片 | 欧洲黄色网 | 手机在线一区二区 | 亚洲精品乱码久久久久久蜜桃图片 | 天天操天天干天天干 | 美女屁股眼视频免费 | 麻豆精品在线 |