成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

詳解從vue的組件傳值著手觀察者模式

瀏覽:6日期:2022-09-29 08:30:51
目錄觀察者模式Vue傳值第一步,我們先在main.js中注冊一下bus第二步,我們開始發送消息第三步,在組件三中接收消息vue的機制觀察者模式存在的意義觀察者模式

首先,提到觀察者模式,這不禁讓我想到了MVVM,MVVM架構模式感覺用到了觀察者的思想。

我們還是按照慣例,了解一下什么是觀察者模式

觀察者模式,類似發布訂閱模式,完成這個動作首先最少得有兩個不同的對象,或者多個對象,他更像是一種一隊多的依賴關系,也就是一種對象的狀態發生改變,與其相關所有的對象的狀態都會發生改變;比如說朋友圈這個功能,一個人可能有上百個好友,當我發布一條朋友圈后,所有和我成為好友的人都會看見這個朋友圈,當另一個人點贊后,所有你的好友其他點贊的人也會收到通知,這很像觀察者,也就是我是發布者,我的好友是訂閱者。

Vue傳值

然后我們看一下什么是vue,vue的原理大家都知道,他是一種自底向上的一種深入響應式的雙向綁定模式,即MVVM,也就是說,vue關注model的變化,model的變化讓mvvm框架更新dom,從而產生視圖view變化。

舉一個項目中很常見的例子:

在寫vue項目中我們都用過父子組件傳值,但是兄弟組件傳值是怎么實現的,首先我們可以用vuex,這很常見,但是還有一種方法不知道你用過沒有,就是Bus,這個Bus只是一種命名而已,叫什么無所謂,你可以叫飛機大炮都可以,這不重要,我們主要看看他是怎么實現的:

第一步,我們先在main.js中注冊一下bus

Vue.prototype.$Bus = new Vue()

我們往vue的原型里注冊了一個全局變量$Bus,他的值是vue的實例,也就是說,到現在為止,$Bus里邊有了vue所有的屬性和方法,這下就好操作了

第二步,我們開始發送消息

這就很符合觀察者模式的發布訂閱模式

我們在組件1中寫如下代碼:

<template> <div><button @click='send'>發送</button> </div></template><script>export default { methods: {send () { this.$Bus.$emit('send',’接收的信息’)} }}</script>

點擊按鈕發送一條信息,這個按鈕也就是充當發布者,我們用到了vue的$emit這個api,那么訂閱者是什么呢?我不說你也應該想到了,對,就是他

第三步,在組件三中接收消息

<template> <div>{{message}} </div></template><script>export default { data () {return { message: ’’} }, mounted () {this.$Bus.$on(’send’, (msg) => { this.message = msg}) }}</script>

就是用$on這個屬性充當接收者

從上可以看出,vue很多地方用到了觀察者的思想,包括他的雙向綁定也是如此

vue的機制

詳解從vue的組件傳值著手觀察者模式

從上圖我們可以看出,vue是通過Object.defineProperty實現對數據的劫持,然后中間做了一個中轉,最后渲染到vue層。

我們可以肯定的是,vue.js借鑒了觀察者模式,但是我感覺還是有點區別的,觀察者模式跟注重的是事件驅動,比如我買房這個動作,第一次和銷售了解可能沒有合適的房源,然后銷售就會跟你說: ‘如果有合適的房源我們會第一時間通知你’,當有新房源的時候他會給你打電話通知你,這一系列的根源是買房這個事件,他驅動了整套流程。而vue我們都知道是數據驅動,也就是只有data里的值發生改變的話,Object.defineProperty才會對他劫持,從而去更新dom,觸發視圖的更新。

那么有沒有更符合觀察者模式特征的?

當然是node.js的events事件了。

首先我們看看events的工作流程:

var events = require(’events’);// 創建 eventEmitter 對象var eventEmitter = new events.EventEmitter();// 創建事件處理程序var connectHandler = function connected() { console.log(’連接成功?!?; // 觸發 data_received 事件 eventEmitter.emit(’data_received’);}// 綁定 connection 事件處理程序eventEmitter.on(’connection’, connectHandler);// 使用匿名函數綁定 data_received 事件eventEmitter.on(’data_received’, function(){ console.log(’數據接收成功。’);});// 觸發 connection 事件 eventEmitter.emit(’connection’);console.log('程序執行完畢。');

輸出一下:

詳解從vue的組件傳值著手觀察者模式

這就完全符合觀察者的工作模式,由emit發布,由on接收。所以說,node.js提供了很好的監聽機制,還有他對整個事務的處理 。其支持了nodejs最特色的I/O模式,比如我們啟動http服務時會監聽其 connect / close,http.request時會監聽 data / end等。

還有沒有類似的案例呢?

當然,js有一個事件監聽者----addEventListener,也有點觀察者的意思,具體用法我就不說了,想必大家用的都很熟悉。

其實只要你認真想一想,還是有很多地方有觀察者的身影的,最簡單的就是一個點擊事件,是不是也有其意思,發布者是一個按鈕,而接收者可以是表單,彈層等任何東西。

觀察者模式存在的意義

首先我們說說他的優點:

1,觀察者模式需要在觀察者和被觀察者之間建立一個耦合,他需要一個更加抽象化將二者聯系在一起

2,觀察者模式支持廣播,也就是一對多的關系,這就讓我們很容易想到一個技術,就是socket,具體可以參考vue項目使用websocket技術

然鵝,他也是優缺點的:

1,創建訂閱者本身要消耗一定的時間和內存

2,當訂閱一個消息時,也許此消息并沒有發生,但這個訂閱者會始終存在內存中。

3,觀察者模式弱化了對象之間的聯系,這本是好事情,但如果過度使用,對象與對象之間的聯系也會被隱藏的很深,會導致項目的難以跟蹤維護和理解。

等會兒,還有一個模式叫發布訂閱模式,很多人都以為他就是觀察者模式(包括我),后來我上網查了一下,發現他們還是有區別的,我們可以說觀察者模式和發布訂閱模式很像,真的很像,但是本質還是有點區別的,最根本的就是調度中心不同。

舉個例子,觀察者模式更注重是目標和觀察者是抽象類,比如天氣預報,觀察者A負責監聽天氣的變化,而B想得知天氣的變化需要將自己注冊到A中,而天氣變化的時候A觸發天氣變化,調度B的接口更新變化。

而發布訂閱模式是如何完成這個動作的呢?A想要感知天氣變化,需要B這個調度中心,而B得到天氣變化需要依賴C的觸發,可能我解釋的不是很清楚,網上有兩個圖比較好

詳解從vue的組件傳值著手觀察者模式

詳解從vue的組件傳值著手觀察者模式

以上就是詳解從vue的組件傳值著手觀察者模式的詳細內容,更多關于從vue的組件傳值著手觀察者模式的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲一二三四在线观看| 色一情一伦一子一伦一区| 国产精品一区免费观看| 久久精品夜色噜噜亚洲aⅴ| 韩国女主播成人在线观看| 国产欧美日韩一级| 国产精品天干天干在线综合| 懂色中文一区二区在线播放| 欧美伊人久久久久久久久影院 | 欧美色视频在线观看| 亚洲一区在线视频| 亚洲大胆av| 国产校园另类小说区| 高清在线观看日韩| 欧美一区二区三区小说| 久久精品国产一区二区三区免费看| 国产三区二区一区久久| 亚洲少妇最新在线视频| 欧美日本精品| 国产欧美日韩另类视频免费观看| 成人在线综合网| 欧美一区二区三区人| 国产在线精品一区二区不卡了| 色噜噜狠狠一区二区三区果冻| 亚洲视频每日更新| 雨宫琴音一区二区在线| 国产精品久久毛片a| 国产精品啊啊啊| 国产精品久久久久一区二区三区共| 91麻豆免费看片| 国产情人综合久久777777| www.亚洲国产| 日韩午夜三级在线| 国产ts人妖一区二区| 日韩欧美中文字幕精品| 丁香天五香天堂综合| 欧美不卡123| 成人网男人的天堂| 久久中文娱乐网| 成人免费高清视频| 精品国产电影一区二区| 成人av在线播放网址| 久久婷婷国产综合国色天香 | 亚洲丝袜制服诱惑| 亚洲激情网址| 一区二区成人在线视频 | 国产精选一区二区三区| 欧美一级精品在线| av电影一区二区| 欧美精品一区二区三区四区| 91丨九色丨蝌蚪富婆spa| 亚洲国产精品ⅴa在线观看| 国语精品中文字幕| 伊人性伊人情综合网| 久久成人免费| 蜜臀av一区二区| 91精品国产色综合久久不卡电影| 成人综合激情网| 国产欧美视频一区二区| 在线免费观看欧美| 一区二区三区日韩| 色诱视频网站一区| 国内精品伊人久久久久av一坑 | 欧美啪啪一区| 一区二区三区中文免费| 久久一日本道色综合久久| 韩国成人精品a∨在线观看| 精品国产欧美一区二区| 亚洲欧洲综合| 久久99热狠狠色一区二区| 久久先锋影音av鲁色资源网| 国产精品日韩欧美一区二区| 国产米奇在线777精品观看| 国产精品嫩草99a| 久久国产一区| 国产成人日日夜夜| 中文字幕一区二区三区在线观看| 久久国产直播| 99国产精品视频免费观看| 夜夜嗨av一区二区三区中文字幕 | 亚洲欧洲精品一区二区三区| 久热精品视频| 成人v精品蜜桃久久一区| 一区二区不卡在线视频 午夜欧美不卡在| 欧美在线观看一区二区| 91在线观看成人| 中文字幕一区二区三区在线不卡| 国产一区二区久久| 精品美女被调教视频大全网站| 精品不卡视频| 偷拍亚洲欧洲综合| 日韩精品影音先锋| 99精品视频免费观看| 亚洲激情五月婷婷| 欧美日韩国产经典色站一区二区三区| 国产成人免费视频网站高清观看视频| 久久久久99精品国产片| 成人免费的视频| 一区二区三区在线观看动漫| 美女亚洲精品| 国产夫妻精品视频| 亚洲国产精品ⅴa在线观看| 亚洲美女色禁图| 亚洲成人av免费| 欧美老女人第四色| 欧美日本中文| 亚洲免费观看高清完整版在线观看| 欧美日韩国产一级二级| 91婷婷韩国欧美一区二区| 亚洲精品久久久蜜桃| 91成人免费网站| aaa欧美大片| 亚洲午夜在线电影| 欧美一卡二卡在线| 亚洲国产一区二区精品专区| 国产福利电影一区二区三区| 欧美国产成人精品| 模特精品在线| 国产精品影音先锋| 中文字幕中文字幕在线一区 | 在线一区二区三区| 成人av在线播放网址| 亚洲免费看黄网站| 欧美日韩三级视频| 好吊视频一区二区三区四区| 奇米一区二区三区| 亚洲精品一区二区精华| 在线观看av一区| 色综合久久综合网97色综合 | 亚洲一级二级三级在线免费观看| 欧美久久一二三四区| bt欧美亚洲午夜电影天堂| 亚洲在线免费播放| 日韩欧美视频在线| 在线视频免费在线观看一区二区| 国产成人在线色| 亚洲色图色小说| 欧美一卡二卡三卡| 久久综合电影| 欧美承认网站| 国产专区综合网| 国产欧美一区二区精品性色| 欧美日韩国产免费一区二区| 亚洲第一黄网| 国产精一品亚洲二区在线视频| 亚洲精品伦理在线| 91精品国产免费久久综合| 91激情五月电影| 亚洲私拍自拍| 国产**成人网毛片九色| 亚洲综合精品久久| 久久―日本道色综合久久| 久久综合福利| 激情丁香综合| 不卡视频免费播放| 蜜臂av日日欢夜夜爽一区| 亚洲色图制服诱惑| 久久综合九色综合久久久精品综合| 久久伊人亚洲| 精品成人国产| 国产aⅴ精品一区二区三区色成熟| 美女在线一区二区| 一区二区三区久久| 久久夜色精品国产噜噜av| 欧美日韩日日骚| 久久精彩视频| 91麻豆国产福利在线观看| 日日摸夜夜添夜夜添亚洲女人| 亚洲精品国产成人久久av盗摄| 这里只有精品电影| 亚洲一区二三| 黄色av一区| 99久久国产免费看| 国产精品一区2区| 日韩成人精品在线| 日韩电影在线一区二区| 亚洲乱码国产乱码精品精可以看| 精品成人在线观看| 欧美男男青年gay1069videost | 亚洲已满18点击进入久久| 中文字幕av一区二区三区免费看 | 中国色在线观看另类| 欧美一级高清片在线观看| 久久综合九色综合欧美狠狠| 色综合久久综合| 欧美激情91| 成人免费高清在线| 国产一区 二区| 久久电影网站中文字幕| 亚洲一区欧美一区| 综合婷婷亚洲小说| 26uuu国产日韩综合| 精品sm在线观看| 欧美一区二区三区免费观看视频 | 国产麻豆精品95视频| 裸体歌舞表演一区二区| 日韩和的一区二区| 香蕉乱码成人久久天堂爱免费| 一区二区三区欧美激情| 亚洲男帅同性gay1069|