<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
主要介紹事件匯流排的定義和編寫方法和Vue是如何實現訊息的訂閱與釋出的。
事件匯流排是元件間通訊的一種方式,適用於任意元件間的通訊,比如毫不相干的兩個元件、父子元件間、後代元件等等,都能通訊。
事件匯流排有兩個特性:
如果A、B元件間通訊,如果A傳送資料給B的情況下,需要以下步驟:
大前提是,需要建立一個事件匯流排,通常使用vm範例本身作為事件匯流排,並把他在一定的時機儲存在Vue建構函式的原型物件中,因為元件範例的原型物件的原型物件=vue範例的原型物件,所以這樣所有的元件範例都是獲取到事件匯流排。
1.B(接收方)需要往事件匯流排總繫結一個自定義事件,並設定事件回撥。
2.A(傳送方)想要傳送資料時,只需觸發B在事件匯流排繫結的自定義事件,並把資料傳過去即可。
main.js:
//引入vue依賴 import Vue from 'vue' //引入元件App import App from './App.vue' // 關閉生產提示 Vue.config.productionTip = false //建立一個vue範例 new Vue({ render: h => h(App), beforeCreate(){ //通常在beforeCreate生命週期函數中進行事件匯流排的設定。 //下面程式碼就是把vm物件本身設定到Vue的原型物件中,屬性名通常是$bus,這個不強制 Vue.prototype.$bus = this; } //設定該vue範例管理id為app的容器 }).$mount('#app')
App.vue:
<template> <!-- 編寫結構 --> <div> <A></A> <hr> <B></B> </div> </template> <script> //修改後的 //引入A元件和B元件,涉及es模組化的語法 import A from "./components/A.vue" import B from "./components/B.vue" export default { components:{ //註冊元件 A, B } } </script> <style> </style>
B.vue:
<template> <div> <div>B元件的名稱:{{name}}</div> <div>A元件的名稱:{{NameForA}}</div> </div> </template> <script> export default { data() { return { name:"yehaocong", NameForA:"" } }, methods:{ //觸發事件時的回撥函數 getNameFromA(nameFromAVC){ console.log("接收來自A元件的名稱:",nameFromAVC); this.NameForA = nameFromAVC; } }, mounted() { //往事件匯流排總繫結自定義事件。 this.$bus.$on("getNameFromA",this.getNameFromA); }, beforeDestroy() { //通常在元件銷燬時,需要解綁自定義事件。 this.$bus.$off("getNameFromA") }, } </script> <style> </style>
A.vue:
<template> <div> <div>{{name}}</div> <button @click="sendName">傳送name屬性值到其他元件</button> </div> </template> <script> export default { data() { return { name:"liaoxianyan" } }, methods: { sendName(){ //傳送方觸發事件 this.$bus.$emit("getNameFromA",this.name); } }, } </script> <style> </style>
效果:
通常最好需要在元件銷燬時解綁自定義事件:
訂閱與釋出的定義:
1.是一種元件間通訊的一種方式。
類似有一個訊息中心,元件A往該訊息中心中訂閱了某訊息,然後一旦訊息元件B往該訊息中釋出該訊息,元件A會立馬收到該訊息,並執行相應回撥。
通常使用第三方的訊息訂閱釋出庫,這裡推薦pubsub-js。
第一步:安裝該依賴:npm i pubsub-js
第二步:在訊息接收方進行訂閱訊息。
第三步:在訊息傳送方進行訊息的釋出。
還是用上面的A、B元件作為例子,A元件時傳送方,B元件時接收方。
第二步:
在B元件定義訊息:
第三步:在A元件釋出訊息:
效果:
通常需要在元件銷燬時進行訊息的取消訂閱。
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45