回覆列表
-
1 # 搬磚前端小子
-
2 # 少辰談
什麼屬於操作dom?只要你改變dom的屬性值,就是操作dom,我覺得你想說的是虛擬dom吧!虛擬dom是用系統記憶體模擬dom結構,當你頁面改變以後,先改變的是虛擬dom,虛擬dom系統透過演算法最佳化儘量少的操作真實dom來實現同樣的效果。
不存在避免dom操作,只是儘量少的操作dom,同時也儘量減少程式設計師的dom操作,vue指定了一些語法,讓我們儘量少的操作dom,其實是vue來代替我們操作了那些dom元素。
什麼屬於操作dom?需要回答這個這個問題,首先,我們必須明白什麼是dom;DOM 是 Document Object Model(文件物件模型)的縮寫;
對於為什麼vue避免了dom操作,其實,根據我的理解,並不是vue避免了dom操作,而是vue的架構中,已經幫我們完成了這些操作,亦或者說是,它是透過資料的改變,去自動驅動dom的改變,在我們平常看來,我們只需要修改資料,那麼整個dom結構,文件內容都會自動完成,就好像我們沒有進行dom操作一樣,其實不然,只是當我們進行資料改變的時候,vue已經幫我們完成了dom操作而已;
這也就是所謂的雙向繫結,資料驅動;
比如,當我們需要在對某個元素進行資料繫結時,我們都知道,直接在元素上新增"v-text="text" "當text值變化時,對應元素的內容也就改變了;那麼,它裡面具體幹了些什麼呢?
首先,我們應該明白,“v-text”其實是vue中的一個指令,也就是directive;原始碼如下:
也就是在將v-text繫結到元素上時,首先會判斷此元素的元素型別,如果nodetype是3,也就是文字節點時,如果是文字節點,則透過修改其data屬性去修改文字內容;如果是其他節點,則透過修改其textContent去修改節點的值;當值變化時,就會執行“this.el[this.attr] = _toString(value)”去修改節點內容;
所以,其實vue並不是避免了dom操作,它其實也進行了dom操作,只是包含在框架內,讓我們沒有明顯感知到而已