您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
03 vue消息訂閱與發布(Vue雙向數據綁定原理分析 -- Dep(發布者,訂閱收集器))
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-07-12 05:28:28【】7人已围观
简介在對數據的讀寫處理過程中,也就是Object.defineProperty()定義的數據set、get函數中。Vue中對于的函數為defineReactive,在精簡版實現中,我只保留了一些基本特性:
function defineReactive(obj, key, value) {
var dep = new Dep()
Object.defineProperty(obj, key, {
enumerable: true,
買粉絲nfigurable: true,
get: function reactiveGetter() {
if (Dep.target) {
dep.depend()
}
return value
},
set: function reactiveSetter(newVal) {
if (value === newVal) {
return
} else {
value = newVal
dep.notify()
}
}
})
}
在對數據進行讀取時,如果當前有 Watcher(對數據的觀察者吧,watcher 會負責將獲取的新數據發送給視圖),那將該 Watcher 綁定到當前的數據上(dep.depend(),dep 關聯當前數據和所有的 watcher 的依賴關系),是一個檢查并記錄依賴的過程。而在對數據進行賦值時,如果數據發生改變,則通知所有的 watcher(借助 dep.notify())。這樣,即便是我們手動改變了數據,框架也能夠自動將數據同步到視圖。
Vue面試題集錦
原理:在創建Vue實例時,Vue會遍歷data選項的屬性,利用Object.defineProperty()為屬性添加getter和setter對數據的讀取進行劫持(getter用來依賴手機,setter用來派發更新),并且在內部追蹤依賴,在屬性被訪問和修改時通知變化。每個組件實例會有相應的watcher實例,會在組件渲染過程中記錄依賴的所有數據屬性,之后依賴項被改動時,setter方法會通知依賴與此data的watcher實例重新計算(派發更新),從而使它關聯的組件重新渲染。
一句話總結:vue.js采用數據劫持結合發布-訂閱模式,通過Object.defineProperty()來劫持各個屬性的setter、getter,在數據變動時發布消息給訂閱者,觸發響應的監聽回調。
我的理解:在new Vue的時候,在Observer中通過Object.defineProperty()達到數據劫持,代理所有數據的getter和setter屬性,在每次觸發setter的時候,都會通過Dep來通知Watcher,Watcher作為Observer數據監聽器與Compile模板解析器之間的橋梁,當Observer監聽到數據發生改變的時候,通過Updater來通知Compile更新視圖。而Compile通過Watcher訂閱對應數據,綁定更新函數,通過Dep來添加訂閱者,達到雙向綁定。
Vue實例從創建到銷毀的全過程,就是生命周期。也就是從開始創建、初始化數據、編譯模板、掛載DOM->渲染、更新->渲染、卸載等一系列過程。
它的生命周期中有多個事件鉤子,讓我們在控制整個Vue實例的過程時更容易形成好的邏輯。
它可以分為8個階段:創建前/后、載入前/后、更新前/后、銷毀前/后。
第一次頁面加載時會觸發beforeCreate、created、beforeMounted、mounted
DOM渲染在mounted中就已經完成。
1、beforeCreate:可以在這加個loading事件,在加載實例時觸發;
2、created:初始化完成時的事件寫在這里,如在這結束loading事件,異步請求也適宜在這里調用;
3、mounted:掛載元素,獲取DOM節點;
4、updated:如果對數據統一處理,在這里寫上相應函數;
5、beforeDestroy:可以放一個確認停止事件的確認框;
6、nextTick:更新數據后立即操作DOM。
1、對象方法v-bind:class="{ 'orange': isRipe, 'green': isNotRipe}"
2、數組方法v-bind:class="[class1, class2]"
3、行內v-bind:style="{ 買粉絲lor: 買粉絲lor, fontSize: fontSize+'px'}"
1、router-link標簽會渲染為標簽,咋填template中的跳轉都是這種;
2、另一種是編輯式導航,也就是通過js跳轉比如router.push('/home')
M- model ,model 表示數據模型,也可以在model中定義數據修改和操作的業務邏輯
V- view,view表示視圖,它負責將數據模型轉換為視圖展示出來
VM- viewmodel,viewmodel是一個同步view和model的對象,連接view和model,用于監聽數據模型的改變和控制視圖行為
買粉絲puted:買粉絲puted是計算屬性,也就是計算值,更多用于計算值的場景。它具有緩存性,買粉絲puted的值在getter執行后是會緩存的,只有在它依賴的屬性值改變之后,下一次獲取買粉絲puted的值時重新調用對應的getter來計算。
在style標簽上添加s買粉絲ped屬性,以表示它的樣式作用于當下的模塊,很好的實現了樣式私有化的目的,但是也得慎用,樣式不易改變。
解決方法:
① 使用混合型的css樣式,混合使用全局樣式和私有樣式。
② 深度作用選擇器:如果你希望s買粉絲ped樣式中的一個選擇器能夠作用的更深,可以使用>>>操作符。如:<style s買粉絲ped>.a>>>.b{ / ... /}</style>
一個元素綁定多個事件的寫法有兩種:
1、修飾符的使用
2、在method方法里分別寫兩個事件
Vue組件中的data值不能為對象,因為對象是引用類型,組件可能會被多個實例同時引用,如果data值為對象,將導致多個實例共享一個對象,其中一個組件改變data屬性值,其它實例也會受到影響。
原理:JS執行是單線程的,它是基于事件循環的。所有同步任務都在主線程上執行,形成一個執行棧。主線程之外,還存在一個任務隊列,只要異步任務有了運行結果,就在任務隊列中放置一個事件。一旦執行棧中的所有同步任務執行完畢,系統就會讀取任務隊列,看看那些對應的異步任務,等結束等待狀態,進入執行棧,開始執行。主線程不斷重復上面的步驟。主執行的執行過程就是tick,所有的異步結果都是通過任務隊列來調度的。任務分為兩大類:宏任務和微任務,宏任務包括:setTimeOut等,微任務包括promise.then。
Vue用異步隊列的方式來控制DOM更新和nextTick回調先后執行。在下次DOM更新循環結束之后執行延遲回調,nextTick主要使用了宏任務和微任務,nextTick把要執行的任務推入一個隊列中,在下一個tick同步執行隊列的所有任務,它是異步任務中的微任務。如果我們在更新了一個響應式數據后,需要同步拿到這個渲染后的DOM結果,就使用nextTick方法,異步拿這個結果。
使用方式:
① this. nextTick.then(cb); 異步
父組件調用子組件的方法
父組件: this.$refs.yeluosen.childMethod()
子組件向父組件傳值并調用方法: $emit
組件之間: bus==$emit+$on
1、第一種方法是直接在子組件中通過this. emit向父組件觸發一個事件,父組件監聽這個事件就行了。
3、第三種都可以實現子組件調用父組件的方法。
keep-alive是Vue內置的一個組件,可以使被包含的組件保留狀態,或避免重新渲染。
原來的組件實例會被復用。這也意味著組件的生命周期鉤子不會再被調用,你可以簡單的監控watch $route對象:
is用來動態切換組件,DOM模板解析
全局的:前置守衛、后置鉤子(beforeEach、afterEach)beforeResolve
單個路由獨享的:beforeEnter
組件級的:beforeRouteEnter(不能獲取組件實例this)、beforeRouteUpdate、beforeRouteLeave
這是因為在執行路有鉤子函數beforeRouteEnter的時候,組件還沒有被創建出來,先執行beforeRouteEnter,再執行周期鉤子函數beforeCreate,可以通過next獲取組件的實例
很赞哦!(876)
相关文章
- 01 mds網織紅細胞怎么變(白細胞低與婦科炎癥有關系嗎)
- 01 youtube官網 中文新聞標題分類方式是(什么是SEO優化?)
- 01 youtube官網下載安裝版和便攜版(camtasia studio 9 怎么破解)
- 01 mp4 download song youtube y2(尋一個聽歌的網站)
- 01 youtube官網下載入口網頁版學生為(全球社交網站排名?)
- 01 mp3 download youtube apk tv下載(播放youtubetv前面幾秒花屏)
- 01 youtube官網下載入口網頁官網版(you tu be的官網是多少?)
- 01 Microsoft Office365無法訂閱(平板office沒有365不能編輯)
- 01 mp3 player download 買粉絲 youtube(P2P買粉絲怎么加速)
- 01 music youtube download windows(今日新聞淺談:Youtube Music 也加入串流音樂服務大混戰)
热门文章
站长推荐
01 youtube官網下載安裝包后綴是(MP4一般都支持多少種視頻格式?)
01 youtube官網下載安裝版和硬盤1(在手機通過無線升級Youtube時 提示下載完成 點擊安裝 但是一打開就顯示解析包時錯誤 應該怎么辦)
01 youtube官網 中文新聞標題怎么寫才能不(網站seo關鍵詞軟件工具有哪些)
01 youtube官網下載安裝版和綠色混合(tubemate下載沒有聲音)
01 youtube官網 中文新聞標題怎么寫才(網站seo關鍵詞軟件工具有哪些)
01 mp3 player download songs from youtube music在您(如何在youtubemusic中創建快捷指令)
01 mp3 player youtube download 買粉絲(YouTubeVideoBuilderReview2022-好吧,但非常有限)
01 youtube官網下載入口正版免費版(如何從Youtube及其他視頻網站下載視頻?)