国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

廈門企業(yè)網(wǎng)站建設(shè)補貼百度官網(wǎng)首頁網(wǎng)址

廈門企業(yè)網(wǎng)站建設(shè)補貼,百度官網(wǎng)首頁網(wǎng)址,asp系統(tǒng)網(wǎng)站怎么做優(yōu)化,歷下網(wǎng)站建設(shè)Vue2&3全局事件總線 Vue2全局事件總線 功能:可以解決所有組件之間通信傳數(shù)據(jù)的問題原理:通過一個共享對象,將所有組件全部綁定到對象上,即可通過這個對象實現(xiàn)組件與組件之間的傳遞數(shù)據(jù),而這個共享對象叫做全局事件…

Vue2&3全局事件總線

Vue2全局事件總線

在這里插入圖片描述

  • 功能:可以解決所有組件之間通信傳數(shù)據(jù)的問題
  • 原理:通過一個共享對象,將所有組件全部綁定到對象上,即可通過這個對象實現(xiàn)組件與組件之間的傳遞數(shù)據(jù),而這個共享對象叫做全局事件總線。

如何分清楚誰是發(fā)送方,誰是接收方?誰用綁定事件,誰用觸發(fā)事件?

  • 假設(shè):我向你傳送數(shù)據(jù),我是發(fā)送方,你是接收方。
    • 若我不向你發(fā)送數(shù)據(jù),則你就不知道數(shù)據(jù)的內(nèi)容,無法拿取(綁定)。(我不觸發(fā),你不能綁定,因為你沒有數(shù)據(jù))
    • 只有我發(fā)送數(shù)據(jù)給你,你才能知道數(shù)據(jù)的內(nèi)容,才能對數(shù)據(jù)進(jìn)行拿取。(誰發(fā)送誰觸發(fā),誰拿取誰綁定)

共享對象創(chuàng)建位置:main.js文件

  • 第一種方法:創(chuàng)建vc對象
// 獲取 VueComponent 構(gòu)造函數(shù)
const VueComponentConstructor = Vue.extend({})
// 創(chuàng)建 vc 對象
const vc = new VueComponentConstructor()
// 使所有組件共享 vc 對象
Vue.prototype.$bus = vc
  • 第二種方法(常用):使用原有的vm對象
    • 在Vue初始化時(beforeCreate),創(chuàng)建共享對象vm
new Vue({el : '#app',render: h => h(App),beforeCreate(){// this指向的是vmVue.prototype.$bus = this}
})

以上代碼中出現(xiàn)的$bus有什么作用?

  • $bus:事件總線,用來管理總線。
  • 其他組件在調(diào)用vc共享對象時可通過this.$bus.$on()this.$bus.$emit()來綁定或觸發(fā)事件

數(shù)據(jù)發(fā)送方:觸發(fā)事件$emit

  • 觸發(fā)事件:this.$bus.$emit('事件名', 接受的數(shù)據(jù))
// Vip.vue
<template><div><button @click="triggerEvent">觸發(fā)事件</button></div>
</template><script>export default {name : 'Vip',data(){return{name : 'zhangsan'}},methods : {triggerEvent(){this.$bus.$emit('event', this.name)}}}
</script>

數(shù)據(jù)接收方:綁定事件$on

  • 綁定事件:this.$bus.$on('事件名', 回調(diào)函數(shù))
// App.vue
<template><div><Vip></Vip></div>
</template><script>import Vip from './components/Vip.vue'export default {name : 'App',mounted() {this.$bus.$on('event', this.test)},methods : {test(name){console.log(name);}},components : {Vip}}
</script>

Vue3全局事件總線

安裝mitt

  • 在CMD窗口中,跳轉(zhuǎn)到Vue3安裝路徑下
  • 輸入命令npm i mitt,當(dāng)出現(xiàn)up to date in 595ms等類似信息表示安裝成功

使用mitt(只要使用全局事件總線,所在的組件就要引入emitter)

  • 第一步:創(chuàng)建一個文件夾utils,在文件夾中創(chuàng)建js文件(event-bus.js)
  • 第二步:在js文件中導(dǎo)入并暴露mitt(如下)
    • 這里的操作主要是為了生成對象emitter
// utils/event-bus.js
import mitt from 'mitt'// mitt函數(shù)的執(zhí)行會生成一個對象:emitter對象
// emitter對象是一個全局事件總線對象
// 綁定和觸發(fā)的操作都在這個對象上的完成
export default mitt()

實現(xiàn)綁定與觸發(fā)事件

  • 綁定事件:emitter.on('事件名', 回調(diào)函數(shù))
  • 觸發(fā)事件:emitter.emit('事件名', 接收的數(shù)據(jù))
// App.vue
<template><Info></Info>
</template><script>// 引入全局事件總線對象import emitter from './utils/event-bus.js'import Info from './components/Info.vue'// 引入組合式API:生命周期鉤子import { onMounted } from 'vue'export default {name : 'App',components : {Info},setup(){// 生命周期鉤子:onMountedonMounted(() => {// 綁定事件emitter.on('event1', showInfo)})function showInfo(info){alert(`姓名:${info.name}`)}return {showInfo}}}
</script>
// Info.vue
<template><button @click="triggerEvent1">觸發(fā)event1事件</button>
</template><script>// 導(dǎo)入全局事件總線對象import emitter from '../utils/event-bus.js'export default {name : 'Info',setup(){function triggerEvent1(){// 觸發(fā)事件emitter.emit('event1', {name:'jack'})}return {triggerEvent1}}}
</script>

解綁事件

  • 原理:在子組件中使用 off 可以消除指定的事件
  • 解綁事件:emitter.off('事件名')
// Info.vue
<template><button @click="triggerEvent1">觸發(fā)event1事件</button><br><button @click="clearEvent1">解綁event1事件</button>
</template><script>// 引入入全局事件總線對象import emitter from '../utils/event-bus.js'export default {name : 'Info',setup(){function triggerEvent1(){// 觸發(fā)全局事件總線上的事件emitter.emit('event1', {name:'jack'})}function clearEvent1(){// 解綁指定的事件emitter.off('event1')}return {triggerEvent1, clearEvent1}}}
</script>

Vue2和Vue3在觸發(fā)和綁定上的不同

  • 第一點:引用的方式不同
// Vue2 的 main.js
new Vue({el : '#app',render: h => h(App),beforeCreate(){Vue.prototype.$bus = this}
})// Vue3 的 utils/event-bus.js
import mitt from 'mitt'
export default mitt()
  • 第二點:調(diào)用方式的不同
// Vue2
綁定:this.$bus.$on('事件名', 回調(diào)函數(shù))
觸發(fā):this.$bus.$emit('事件名', 接受的數(shù)據(jù))
解綁:this.$bus.$off('事件名')// Vue3 需要先引入 import emitter from '../utils/event-bus.js'
綁定:emitter.on('事件名', 回調(diào)函數(shù))
觸發(fā):emitter.emit('事件名', 接收的數(shù)據(jù))
解綁:emitter.off('事件名')
JavaScript
// Vue2
綁定:this.$bus.$on('事件名', 回調(diào)函數(shù))
觸發(fā):this.$bus.$emit('事件名', 接受的數(shù)據(jù))
解綁:this.$bus.$off('事件名')// Vue3 需要先引入 import emitter from '../utils/event-bus.js'
綁定:emitter.on('事件名', 回調(diào)函數(shù))
觸發(fā):emitter.emit('事件名', 接收的數(shù)據(jù))
解綁:emitter.off('事件名')
http://aloenet.com.cn/news/46991.html

相關(guān)文章:

  • 團(tuán)購網(wǎng)站app制作seo網(wǎng)站的優(yōu)化方案
  • 微信公眾號搭建網(wǎng)站seo外推軟件
  • 網(wǎng)站建設(shè)代碼上傳廣州seo服務(wù)公司
  • c 做的web網(wǎng)站怎么發(fā)布網(wǎng)站推廣排名服務(wù)
  • 適合小學(xué)生的最新新聞湖北seo服務(wù)
  • 稅務(wù)網(wǎng)站建設(shè)建議深圳高端網(wǎng)站建設(shè)公司
  • 華夏名網(wǎng)修改網(wǎng)站信息網(wǎng)絡(luò)推廣員的前景
  • 上海網(wǎng)站建設(shè)怎么列舉五種網(wǎng)絡(luò)營銷模式
  • thinkphp 網(wǎng)站開發(fā)衡陽有實力seo優(yōu)化
  • 做公司網(wǎng)站聯(lián)系公司培訓(xùn)課程
  • 網(wǎng)站建設(shè)外包名詞解釋在線優(yōu)化工具
  • 大型網(wǎng)站制作建網(wǎng)站專業(yè)
  • 武漢網(wǎng)站開發(fā)建設(shè)湖北seo
  • 淘寶網(wǎng)網(wǎng)站建設(shè)目的網(wǎng)站運營策劃書
  • 凡科網(wǎng)站產(chǎn)品導(dǎo)航怎么做萌新seo
  • 企業(yè)如何做網(wǎng)站推廣公司百度官網(wǎng)優(yōu)化
  • 好多個人網(wǎng)站做經(jīng)營性網(wǎng)站電商平臺運營
  • 用凡科做網(wǎng)站可靠嗎外國網(wǎng)站怎么進(jìn)入
  • 網(wǎng)站 f型軟文營銷的案例
  • 如何做酒店網(wǎng)站設(shè)計uc瀏覽器關(guān)鍵詞排名優(yōu)化
  • 揚州高郵網(wǎng)站建設(shè)上海網(wǎng)站建設(shè)哪家好
  • 南江縣建設(shè)局網(wǎng)站企業(yè)線上培訓(xùn)平臺有哪些
  • 網(wǎng)站關(guān)鍵詞排名全掉了seo優(yōu)化大公司排名
  • 照明網(wǎng)站建設(shè)新媒體
  • 公眾號做電影網(wǎng)站營銷伎巧第一季
  • 東莞網(wǎng)絡(luò)優(yōu)化哪家強seo排名點擊軟件運營
  • 家居網(wǎng)站建設(shè)的需求分析今日新聞簡報
  • 安吉城鄉(xiāng)建設(shè)局網(wǎng)站百度推廣登陸網(wǎng)址
  • 聊城網(wǎng)站改版搜索引擎營銷與seo優(yōu)化
  • 成人版嗶哩嗶哩bilibili邢臺市seo服務(wù)