vue.js單文件組件中非父子組件的傳值實例
最近在研究vue.js,總體來說還算可以,但是在web開發(fā)群里有一些人問在單文件組件開發(fā)模式中非父子組件如何傳值的問題,今天在這里講講,希望對大家有所幫助!
在官網(wǎng)api中的這段講解很少,也很模糊;官網(wǎng)中說明如下:
非父子組件通信:
有時候兩個組件也需要通信 (非父子關(guān)系)。在簡單的場景下,可以使用一個空的 Vue 實例作為中央事件總線:
var bus = new Vue(); // 觸發(fā)組件 A 中的事件 bus.$emit('id-selected', 1) // 在組件 B 創(chuàng)建的鉤子中監(jiān)聽事件 bus.$on('id-selected', function (id) { // ... })
那么這一段在單文件組件開發(fā)模式中具體怎么用呢?
首先在main.js中加入data,如下:
new Vue({ el: '#app', router, template: '<App/>', components: { App }, data:{ bus:new Vue() } })
如何獲取到這個空的vue對象 bus呢.在組件里面直接調(diào)用這個this.$root
<template> <div class="title" @click="change(msg)">{{ msg }}</div> </template> <script> export default { name: 'first', data() { return { msg: '我是首頁' } }, methods: { change(text) { this.$root.bus.$emit("hehe", text) } } } </script>
然后在另一個組件內(nèi)調(diào)用on事件接收,當(dāng)然在組件銷毀時解除綁定,使用on事件接收,當(dāng)然在組件銷毀時解除綁定,使用off方法
<template> <h1>{{ msg }}</h1> </template> <script> export default { name: 'second', data() { return { msg: '我是第二頁' } }, created() { let that = this; this.$root.bus.$on("hehe", function (t) { that.msg = that.msg + t }) } } </script>
然后點擊的時候就能傳遞值了,還等什么,快來試試吧!
以上這篇vue.js單文件組件中非父子組件的傳值實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue+ElementUI?實現(xiàn)分頁功能-mysql數(shù)據(jù)
這篇文章主要介紹了Vue+ElementUI?實現(xiàn)分頁查詢-mysql數(shù)據(jù),當(dāng)數(shù)據(jù)庫中數(shù)據(jù)比較多時,就每次只查詢一部分來緩解服務(wù)器和頁面壓力。這里使用elementui的?Pagination?分頁?組件,配合mysql的limit語句,實現(xiàn)分頁查詢mysql數(shù)據(jù),下面來看看具體實現(xiàn)過程,希望對大家學(xué)習(xí)有所幫助2021-12-12Vue響應(yīng)式原理Observer、Dep、Watcher理解
這篇文章主要介紹了Vue響應(yīng)式原理-理解Observer、Dep、Watcher,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06