最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue組件通信的四種方式匯總

 更新時(shí)間:2018年02月08日 08:28:52   作者:ziwei3749  
這篇文章主要給大家介紹了關(guān)于Vue組件通信的四種方式,分別是父子組件通信、非父子組件的eventBus通信、利用localStorage或者sessionStorage以及利用Vuex等方法,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

眾所周知vue是一種mvvm框架,它相對于jquery可能比較大的差異點(diǎn)之一就在于組件之間的通信了。本文重點(diǎn)是梳理了前兩個(gè),父子組件通信和eventBus通信,我覺得Vue文檔里的說明還是有一些簡易,我自己第一遍是沒看明白。

  • 父子組件的通信
  • 非父子組件的eventBus通信
  • 利用本地緩存實(shí)現(xiàn)組件通信
  • Vuex通信

第一種通信方式:父子組件通信

父組件向子組件傳遞數(shù)據(jù)

父組件一共需要做4件事

      1.import son from './son.js' 引入子組件 son

      2.在components : {"son"} 里注冊所有子組件名稱

      3.在父組件的template應(yīng)用子組件, <son></son>

      4.如果需要傳遞數(shù)據(jù)給子組件,就在template模板里寫 <son :num="number"></son>

 // 1.引入子組件 
 import counter from './counter'
 import son from './son'
// 2.在ccmponents里注冊子組件
 components : {
 counter,
 son
 },
// 3.在template里使用子組件
 <son></son>
 // 4.如果需要傳遞數(shù)據(jù),也是在templete里寫
 <counter :num="number"></counter>

子組件只需要做1件事

      1.用props接受數(shù)據(jù),就可以直接使用數(shù)據(jù)

      2.子組件接受到的數(shù)據(jù),不能去修改。如果你的確需要修改,可以用計(jì)算屬性,或者把數(shù)據(jù)賦值給子組件data里的一個(gè)變量

 // 1.用Props接受數(shù)據(jù)
 props: [
  'num'
  ],
// 2.如果需要修改得到的數(shù)據(jù),可以這樣寫
 props: [
  'num'
 ],
 data () {
 return {
  number : this.num
 }
 },

子組件向父組件傳遞數(shù)據(jù)

父組件一共需要做2件事情

在template里定義事件

在methods里寫函數(shù),監(jiān)聽子組件的事件觸發(fā)

// 1. 在templete里應(yīng)用子組件時(shí),定義事件changeNumber
 <counter :num="number"
   @changeNumber="changeNumber"
 >
 </counter>
// 2. 用changeNumber監(jiān)聽事件是否觸發(fā)
 methods: {
  changeNumber(e){
  console.log('子組件emit了',e);
  this.number = e
  },
 }

子組件一共需要1件事情

在數(shù)據(jù)變化后,用$emit觸發(fā)即可

// 1. 子組件在數(shù)據(jù)變化后,用$emit觸發(fā)即可,第二個(gè)參數(shù)可以傳遞參數(shù)
 methods: {
  increment(){
   this.number++
   this.$emit('changeNumber', this.number)
  },
 }

第二種通信方式: eventBus

eventBus這種通信方式,針對的是非父子組件之間的通信,它的原理還是通過事件的觸發(fā)和監(jiān)聽。

但是因?yàn)槭欠歉缸咏M件的關(guān)系,他們需要有一個(gè)中間組件來連接。

我是使用的通過在根組件,也就是#app組件上定義了一個(gè)所有組件都可以訪問到的組件,具體使用方式如下

使用eventBus傳遞數(shù)據(jù),我們一共需要做3件事情

      1.給app組件添加Bus屬性 (這樣所有組件都可以通過this.$root.Bus訪問到它,而且不需要引入任何文件)

      2.在組件1里,this.$root.Bus.$emit觸發(fā)事件

      3.在組件2里,this.$root.Bus.$on監(jiān)聽事件

// 1.在main.js里給app組件,添加bus屬性
import Vue from 'vue'
new Vue({
 el: '#app',
 components: { App },
 template: '<App/>',
 data(){
 return {
 Bus : new Vue()
 }
 }
})
// 2.在組件1里,觸發(fā)emit
increment(){
 this.number++
 this.$root.Bus.$emit('eventName', this.number)
 },
// 3.在組件2里,監(jiān)聽事件,接受數(shù)據(jù)
mounted(){
 this.$root.Bus.$on('eventName', value => {
 this.number = value
 console.log('busEvent');
 })
},

第三種通信方式: 利用localStorage或者sessionStorage

這種通信比較簡單,缺點(diǎn)是數(shù)據(jù)和狀態(tài)比較混亂,不太容易維護(hù)。

通過window.localStorage.getItem(key) 獲取數(shù)據(jù)

通過window.localStorage.setItem(key,value) 存儲(chǔ)數(shù)據(jù)

注意:JSON.parse() / JSON.stringify() 做數(shù)據(jù)格式轉(zhuǎn)換。

第四種通信方式: 利用Vuex

Vuex比較復(fù)雜,可以單獨(dú)寫一篇

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • vue中使用svg-icon遇到的坑及解決

    vue中使用svg-icon遇到的坑及解決

    這篇文章主要介紹了vue中使用svg-icon遇到的坑及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Vue對話框組件使用方法詳解

    Vue對話框組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue對話框組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java獲取客戶端信息以及IP地址

    Java獲取客戶端信息以及IP地址

    這篇文章主要為大家詳細(xì)介紹了如何使用Java獲取客戶端信息以及IP地址,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Vue渲染失敗的幾種原因及解決方案

    Vue渲染失敗的幾種原因及解決方案

    這篇文章主要介紹了Vue渲染失敗的幾種原因及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue?Echarts實(shí)現(xiàn)多功能圖表繪制的示例詳解

    Vue?Echarts實(shí)現(xiàn)多功能圖表繪制的示例詳解

    作為前端人員,日常圖表、報(bào)表、地圖的接觸可謂相當(dāng)頻繁,今天小編隆重退出前端框架之VUE結(jié)合百度echart實(shí)現(xiàn)中國地圖+各種圖表的展示與使用;作為“你值得擁有”專欄階段性末篇,值得一看
    2023-02-02
  • vue實(shí)現(xiàn)簽到日歷效果

    vue實(shí)現(xiàn)簽到日歷效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)簽到日歷效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • vue 父組件通過v-model接收子組件的值的代碼

    vue 父組件通過v-model接收子組件的值的代碼

    這篇文章主要介紹了vue 父組件通過v-model接收子組件的值的代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • vue中動(dòng)態(tài)出來返回的時(shí)間秒數(shù)(在多少秒顯示分、小時(shí)等等)

    vue中動(dòng)態(tài)出來返回的時(shí)間秒數(shù)(在多少秒顯示分、小時(shí)等等)

    這篇文章主要給大家介紹了關(guān)于vue中動(dòng)態(tài)出來返回的時(shí)間秒數(shù)(在多少秒顯示分、小時(shí)等等)的相關(guān)資料,文中通過代碼示例介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • Vue實(shí)現(xiàn)全局異常處理的幾種方案

    Vue實(shí)現(xiàn)全局異常處理的幾種方案

    本文主要介紹了使用pyscript在網(wǎng)頁中撰寫Python程式的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • vue中使用axios post上傳頭像/圖片并實(shí)時(shí)顯示到頁面的方法

    vue中使用axios post上傳頭像/圖片并實(shí)時(shí)顯示到頁面的方法

    今天小編就為大家分享一篇vue中使用axios post上傳頭像/圖片并實(shí)時(shí)顯示到頁面的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評論

教育| 罗山县| 余干县| 鸡泽县| 黑山县| 阜宁县| 长春市| 邯郸县| 普格县| 中山市| 柳江县| 莆田市| 即墨市| 宝丰县| 中阳县| 江油市| 新民市| 西乡县| 蕉岭县| 南乐县| 平泉县| 祁阳县| 郯城县| 齐齐哈尔市| 济源市| 彩票| 开江县| 寿光市| 芮城县| 靖西县| 陈巴尔虎旗| 仲巴县| 桐乡市| 礼泉县| 富裕县| 株洲市| 巨鹿县| 嫩江县| 星子县| 淮滨县| 菏泽市|