欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Vue組件之間的數(shù)據(jù)通信實例

 更新時間:2017年06月17日 11:41:33   作者:Katherine的小世界  
本篇文章主要介紹了詳解Vue組件之間的數(shù)據(jù)通信實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近在用vue做項目,學(xué)習(xí)了不少東西,但是有時候光顧著做項目卻忘記要找個時間來整理一下最近的一些學(xué)習(xí)新得,因為是新手,所以可能會有錯誤的地方,歡迎指出和交流呀~~~

關(guān)于父子組件以及非父子組件之間的數(shù)據(jù)通信

1 父子組件之間數(shù)據(jù)通信

一般父組件向子組件傳遞數(shù)據(jù)用prop進(jìn)行傳遞,注意,子組件不能對prop中的數(shù)據(jù)進(jìn)行更改,vue中規(guī)定是防止子組件對父組件中的數(shù)據(jù)進(jìn)行竄改。而子組件向父組件進(jìn)行數(shù)據(jù)傳遞則可以通過事件觸發(fā)父組件的事件來實現(xiàn)數(shù)據(jù)的傳遞。(是不是有點懵逼了,看個例子吧 )

(這里我就直接摘取一段項目中的例子代碼來說明)

使用prop進(jìn)行數(shù)據(jù)傳遞:

//這是父組件中的部分代碼,父組件向子組件<handle-Employee><handle-Employee>傳遞數(shù)據(jù)(method,dialogFormvisible)
 // 父組件的部分代碼
<!--添加員工模塊-->
   <div class="add">
    <el-button type="primary" icon="edit" @click="handleAdd">新增員工</el-button>
    <handle-Employee :method="method"
     :dialogFormVisible="dialogFormVisible" @close="closeDialog" @getEmployee="getEmployee"></handle-Employee>
   </div>
  </div>
// 父組件的script代碼
 export default {
  data () {
   return {
    method:{handle: 'add‘, title: '增加員工'}
    dialogFormvisible: false
 }
 } 
}

// 子組件中則需要加prop屬性數(shù)據(jù) ,如下所示:
 export default {
   props: [ 'method', 'dialogFormVisible']
 }

//所以只要父組件中的數(shù)據(jù)變化修改,子組件中的數(shù)據(jù)也會跟這修改;

在chrome中用vue-devtool其實也可以看到相關(guān)的數(shù)據(jù)屬性;

當(dāng)然,子組件做完相關(guān)操作之后,需要時間的是將屬性值dialogFormVisible重新修改為false。若是直接在子組件進(jìn)行修改的話,就會報錯,因為會影響到父組件的數(shù)據(jù),vue中規(guī)定不能直接對prop的屬性值進(jìn)行修改。那么就可以用事件觸發(fā)來實現(xiàn)子組件向父組件傳遞數(shù)據(jù)了。


///父組件監(jiān)聽子組件的事件,通過@close="closeDialog"和@getEmployee="getEmployee"來實現(xiàn)監(jiān)聽;
一旦子組件中的事件close和getEmployee發(fā)生之后,就會觸發(fā)父組件中的事件closeDialog和getEmployee事件。
// 父組件的部分代碼
<div class="add">
  <el-button type="primary" icon="edit" @click="handleAdd">新增員工</el-button>
  <handle-Employee :method="method" :dialogFormVisible="dialogFormVisible" @close="closeDialog" ></handle-Employee>
</div>

//子組件中的事件分發(fā) 
export default {
methods: {
 // 關(guān)閉彈出框
   closeDialog () {
    this.$emit('close', false)  //這里就是直接觸發(fā)子組件的close事件,一旦這個執(zhí)行,父組件中的對應(yīng)方法就會執(zhí)行。
   }
}
}
// 當(dāng)那邊觸發(fā)關(guān)閉事件的時候,這邊的顯示值就要關(guān)閉,那邊會傳過來一個false

// 父組件的事件
export default {
methods: {
 // 當(dāng)那邊觸發(fā)關(guān)閉事件的時候,這邊的顯示值就要關(guān)閉,那邊會傳過來一個false
  closeDialog (val) {
    this.dialogFormVisible = val
   }
}
}

這樣就實現(xiàn)了父子組件之間的數(shù)據(jù)傳遞;

2 實現(xiàn)非父子組件之間的數(shù)據(jù)傳遞

通過建立中間的事件bus總線。實現(xiàn)非父子組件之間的數(shù)據(jù)通信。

  1. 首先建立事件bus,我會新建一個bus.js文件;注冊bus。
  2. 分別在組件中使用emit和on實現(xiàn)數(shù)據(jù)之間的通信;

1 bus.js文件

//bus.js,注冊Bus
import Vue from 'vue'
export default new Vue()

2 組件emit觸發(fā)事件

<template>
 <div class="add-task" :class="{'ishide':isAdding}" @click="addtask()">
  <i class="fa fa-plus-circle" aria-hidden="true"></i>
  添加任務(wù)
 </div>
</template>
<script>
 import Bus from '@/bus'
 export default {
 methods: {
 props: ['index'],
  data () {
   return {
    isAdding: false
   }
  },
   addtask () {
    this.isAdding = true
    Bus.$emit('adding-task', this.isAdding, this.index) // 這里觸發(fā)的事件是'adding-task',
    傳遞了兩個參數(shù),分別是this.isAdding和this.index
    this.$emit('addtask')
   }
  }
 }

3 另外一個組件on接收事件

// 模板中的代碼就不展示了。
主要展示的是script中的代碼
export default{
data() // 這里的數(shù)據(jù)也不一一顯示啦;
created () {
// 這里使用on監(jiān)聽了adding-task事件,接收到兩個參數(shù)。所以一旦上面的組件中的adding-task事件觸發(fā),這里就會監(jiān)聽到。
   Bus.$on('adding-task', (state, index) => {
    if (this.index === index) {
     this.isShow = state
    }
   })
  }
}

缺點:

有時候小的子組件在頁面中有很多個,需要復(fù)用,那么為了防止每一次觸發(fā)相應(yīng)的事件的時候,都會影響到監(jiān)聽的對應(yīng)組件,如下圖所示。我的解決方案就是給每一個循環(huán)的子組件賦值一個index的值;

//這里我會在每一次組件emit的時候傳遞一個index的值,另外一個組件on之后接受參數(shù),會先判斷該index是不是與自己的index相等,如果相等才執(zhí)行相應(yīng)的數(shù)據(jù)改變操作。
 Bus.$on('adding-task', (state, index) => {
    if (this.index === index) {
     this.isShow = state
    }

今天先到這里,困了。還有更復(fù)雜的數(shù)據(jù)通信是用vuex,不過我現(xiàn)在的項目應(yīng)該是暫時還不會用到,所以以后用到再去深入了解。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue 對象添加或刪除成員時無法實時更新的解決方法

    vue 對象添加或刪除成員時無法實時更新的解決方法

    這篇文章主要介紹了vue 對象添加或刪除成員時無法實時更新的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • vue 動態(tài)添加/刪除dom元素節(jié)點的操作代碼

    vue 動態(tài)添加/刪除dom元素節(jié)點的操作代碼

    這篇文章主要介紹了vue 動態(tài)添加/刪除dom元素,需要在點擊添加時,增加一行key/value的輸入框;點擊垃圾桶圖標(biāo)時,刪除對應(yīng)行,本文結(jié)合實例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • vue實現(xiàn)文字橫向無縫走馬燈組件效果的實例代碼

    vue實現(xiàn)文字橫向無縫走馬燈組件效果的實例代碼

    這篇文章主要介紹了vue 文字橫向無縫走馬燈組件的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • Vue腳手架編寫試卷頁面功能

    Vue腳手架編寫試卷頁面功能

    腳手架是一種用于快速開發(fā)Vue項目的系統(tǒng)架構(gòu),這篇文章主要介紹了Vue腳手架實現(xiàn)試卷頁面功能,通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 淺析vue插槽和作用域插槽的理解

    淺析vue插槽和作用域插槽的理解

    插槽,也就是slot,是組件的一塊HTML模板,這塊模板顯示不現(xiàn)實、以及怎樣顯示由父組件來決定。這篇文章主要介紹了淺析vue插槽和作用域插槽的理解,需要的朋友可以參考下
    2019-04-04
  • vue項目打包后部署到服務(wù)器的詳細(xì)步驟

    vue項目打包后部署到服務(wù)器的詳細(xì)步驟

    這篇文章主要介紹了vue項目打包后部署到服務(wù)器,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • vue配置多頁面的實現(xiàn)方法

    vue配置多頁面的實現(xiàn)方法

    本篇文章主要介紹了vue配置多頁面的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Vue自定義指令簡介和基本使用示例

    Vue自定義指令簡介和基本使用示例

    同時Vue也支持讓開發(fā)者,自己注冊一些指令,這些指令被稱為自定義指令,每個指令都有自己各自獨立的功能,這篇文章主要介紹了Vue自定義指令簡介和基本使用,需要的朋友可以參考
    2024-03-03
  • Vue中之nextTick函數(shù)源碼分析詳解

    Vue中之nextTick函數(shù)源碼分析詳解

    這篇文章主要介紹了Vue中之nextTick函數(shù)源碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Vue獲取DOM元素并修改屬性的方法

    Vue獲取DOM元素并修改屬性的方法

    這篇文章主要介紹了Vue獲取DOM元素并修改屬性或者樣式,文中通過兩種方法給大家介紹了vue 如何獲取并操作DOM元素,需要的朋友可以參考下
    2022-10-10

最新評論