angular2+監測屬性的變化
angular專案中通過@Input來實現從父component到子component屬性的傳值。angular框架本身提供了一系列的鉤子函式, 其中ngOnchange是對傳入值進行監測,只要傳入值有所變化,就會進入ngOnchange鉤子函式。
曾經一度也是認為,屬性的監測理所當然應該是在ngChange裡操作。但自從遠方的朋友給了這樣一個comments:
查閱了相關資料,setter相較於ngOnchange的好處,大致可以理解為,ngOnChange執行的時候,會監測所有@Input屬性的變化,但有的時候我們往往只需要對某一個屬性進行監測,所以用setter更簡潔方便, 詳情:https://ngdev.space/angular-2-input-property-changes-detection-3ccbf7e366d2
但令我好奇的是,angular關於@Input的實現原理到底是什麼,為什麼只要輸入引數有所變化就會,進入setter這個鉤子函式呢?
查閱了angular關於@Input的原始碼庫,其實現邏輯為:
@Input 傳入即是從父元件的dom元素取值賦值給子元件變數的一個過程。即是賦值操作,自然會進入setter函式,也就是說只要父元件dom元素的值發生變化,即會發生一次賦值操作進入setter鉤子函式。
問題又來了, 父元件是怎麼監測到dom元素值發生變化的呢?
這就涉及到一個永恆的話題,變化監測,Angular的變化檢測可以分元件進行,每個元件都有對應的變化檢測器ChangeDetector。這裡先不深入探究。關於angular變化監測這個深坑,一定要細細品味,深入骨髓。。。
https://zhuanlan.zhihu.com/p/27901766 (先貼一個連結,回頭慢慢看)
https://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html
相關文章
- 論如何監聽物件某個屬性的變化物件
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務Vue變數
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務...Vue變數
- JavaScript監聽屬性改變JavaScript
- 微信小程式,實現 watch 屬性,監聽資料變化微信小程式
- 學習筆記:vue為什麼不能監聽陣列屬性的變化筆記Vue陣列
- 【Openxml】顏色變化屬性計算XML
- 屬性和監聽
- vue 監視屬性Vue
- 提供一種Fragment可見性改變的監測方案Fragment
- vue3如何將 app 全域性變數物件變為響應式並監聽到某個屬性的改變VueAPP變數物件
- 滑鼠雙擊變成屬性怎麼辦 滑鼠雙擊變成屬性的方法
- PLC結構化文字(ST)——變數型別和變數屬性變數型別
- 監聽 watch props物件屬性監聽 或深度監聽物件
- React專題:不可變屬性React
- CSS 自定義屬性(變數)CSS變數
- Vue:watch 監聽多個屬性值的方法Vue
- vue計算屬性 監聽 方法的區別Vue
- js 改變 控制元件的屬性值JS控制元件
- 如何監聽URL的變化?
- 區域性靜態變數的初始化觀測變數
- 使用 CSS 自定義屬性(變數)CSS變數
- 物件屬性值賦給變數物件變數
- JavaScript 工作原理之十-使用 MutationObserver 監測 DOM 變化JavaScriptServer
- Python監測監聽螢幕介面內容變化併傳送通知Python
- Python - 物件導向程式設計 - 類變數、例項變數/類屬性、例項屬性Python物件程式設計變數
- 露天礦邊坡變形監測 一體化監測站裝置 精準監控變形情況 確保邊坡安全
- 【JS】在連續性監聽事件中,監聽當前狀態是否變化JS事件
- 【中秋國慶不斷更】OpenHarmony巢狀類物件屬性變化巢狀物件
- 如何獲取 C# 類中發生資料變化的屬性資訊C#
- Vue學習筆記(六):監視屬性Vue筆記
- Android 顏色漸變 屬性動畫Android動畫
- 深入理解 Getter和Setter 對物件的屬性監聽物件
- vue 監聽路由變化Vue路由
- 【爬坑日記】vue中watch物件中某一個屬性變化Vue物件
- Python 類的屬性與例項屬性Python
- 利用ENVI深度學習進行遙感變化監測教程深度學習
- CMake 屬性之全域性屬性
- CSS變數(自定義屬性)實踐指南CSS變數