1. 第一種方式就是官方推薦的
創(chuàng)新互聯(lián)建站專注于企業(yè)網絡營銷推廣、網站重做改版、宜川網站定制設計、自適應品牌網站建設、成都h5網站建設、購物商城網站建設、集團公司官網建設、外貿網站制作、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為宜川等各大城市提供網站開發(fā)制作服務。
官方推薦方式
有時候兩個組件也需要通信(非父子關系)。在簡單的場景下,可以使用一個空的 Vue 實例作為中央事件總線。
本質是通過派發(fā)事件然后監(jiān)聽事件從而更改值,(父子組件通信也可用這個方式,但是不同的一點就是父子組件通信的時候可以不用一個空的Vue實例來做中轉,這種方式我這里就不做演示的了,因為我的題目是非父子通信)
空的Vue實例 bus
import Vue from 'vue' const bus = new Vue() export default bus
組件add
<!--html結構--> <template> <div> <p>我是add組件的num:{{num}} </p> <button @click='add'>增加</button> </div> </template>
// js <script> import bus from '../bus.js' export default { data() { return { num: '' } }, methods: { add() { if (this.num) { this.num++ bus.$emit('num-change', this.num) } else { this.num = 1 bus.$emit('num-change', this.num) } } } } </script>
組件sub
<!--html結構--> <template> <div> <p>我是sub組件的num:{{num}}</p> </div> </template>
// js <script> import bus from '../bus.js' export default { data() { return { num: '' } }, created() { bus.$on('num-change', num => { this.num = num }) } } </script>
2.通過vuex來進行狀態(tài)管理
官方狀態(tài)管理
vuex我這里就不詳細說了,網上教程太多。
3.取巧利用js中的對象的特性(指針)
Object在內存中存儲只是保留指針,所以父組件通過props來給兄弟組件傳遞同一個對象,兄弟組件接收的對象跟父組件的對象都是指向同一個內存地址,故不管在哪里修改都能保持一致。
上代碼,父組件把同一個對象傳遞給add組件和sub組件,那么add組件和sub組件接收到的對象也是指向父組件app的對象都是指向同一個內存地址。add組件對傳入的對象進行+1的操作,sub組件進行-1的操作。
父組件 app.vue
<!--html結構--> <template> <div id="app"> <h2>我是app父組件的newNum:{{share.newNum}}</h2> <hr> <!--將同一個對象同時傳給兩個子組件--> <addnum :share1='share'></addnum> <hr> <subnum :share2='share'></subnum> </div> </template>
// js import addnum from './components/add' import subnum from './components/sub' export default { data() { return { share: { newNum: 1 } } }, components: { addnum, subnum } }
子組件add.vue
<!--html結構--> <template> <div> <p>我是add組件的newNum:{{share1.newNum}} </p> <button @click='add'>增加</button> </div> </template>
//js <script> export default { methods: { add() { this.share1.newNum++ } }, props: { share1: { type: Object, } } } </script>
子組件sub.vue
<!--html結構--> <template> <div> <p>我是sub組件的newNum:{{share2.newNum}}</p> <button @click='numSub'>減少</button> </div> </template>
// js <script> export default { methods: { numSub() { this.share2.newNum-- } }, props: { share2: { type: Object, } } } </script>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
當前標題:詳解vue組件通信的三種方式
新聞來源:http://www.chinadenli.net/article14/piddde.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站制作、關鍵詞優(yōu)化、域名注冊、網站內鏈、網站設計、網站收錄
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)