中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解vue組件通信的三種方式

發布時間:2020-09-24 14:08:47 來源:腳本之家 閱讀:144 作者:命理難說 欄目:web開發

1. 第一種方式就是官方推薦的

官方推薦方式

有時候兩個組件也需要通信(非父子關系)。在簡單的場景下,可以使用一個空的 Vue 實例作為中央事件總線。

本質是通過派發事件然后監聽事件從而更改值,(父子組件通信也可用這個方式,但是不同的一點就是父子組件通信的時候可以不用一個空的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來進行狀態管理

官方狀態管理

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>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富阳市| 凤冈县| 社旗县| 榆社县| 绥宁县| 迁安市| 九龙城区| 新和县| 贺州市| 奉化市| 井研县| 静安区| 邓州市| 乌兰县| 旺苍县| 焉耆| 栖霞市| 巴青县| 尚义县| 淮北市| 高青县| 原阳县| 无为县| 枝江市| 沂水县| 通城县| 葫芦岛市| 南和县| 东台市| 民和| 苍山县| 洪洞县| 九龙城区| 柘城县| 桓仁| 静宁县| 遂溪县| 铜山县| 六盘水市| 定州市| 夏津县|