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

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

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

最近在用vue做項(xiàng)目,學(xué)習(xí)了不少東西,但是有時候光顧著做項(xiàng)目卻忘記要找個時間來整理一下最近的一些學(xué)習(xí)新得,因?yàn)槭切率郑钥赡軙绣e誤的地方,歡迎指出和交流呀~~~

關(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ā)父組件的事件來實(shí)現(xiàn)數(shù)據(jù)的傳遞。(是不是有點(diǎn)懵逼了,看個例子吧 )

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

使用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其實(shí)也可以看到相關(guān)的數(shù)據(jù)屬性;

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


///父組件監(jiān)聽子組件的事件,通過@close="closeDialog"和@getEmployee="getEmployee"來實(shí)現(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
   }
}
}

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

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

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

  1. 首先建立事件bus,我會新建一個bus.js文件;注冊bus。
  2. 分別在組件中使用emit和on實(shí)現(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
    }
   })
  }
}

缺點(diǎn):

有時候小的子組件在頁面中有很多個,需要復(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)在的項(xiàng)目應(yīng)該是暫時還不會用到,所以以后用到再去深入了解。

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

相關(guān)文章

  • vue+j簡單的實(shí)現(xiàn)輪播效果,滾動公告,銜接

    vue+j簡單的實(shí)現(xiàn)輪播效果,滾動公告,銜接

    這篇文章主要介紹了vue+j簡單的實(shí)現(xiàn)輪播效果,滾動公告,銜接,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • vue.js使用v-model實(shí)現(xiàn)父子組件間的雙向通信示例

    vue.js使用v-model實(shí)現(xiàn)父子組件間的雙向通信示例

    這篇文章主要介紹了vue.js使用v-model實(shí)現(xiàn)父子組件間的雙向通信,結(jié)合實(shí)例形式分析了vue.js基于v-model父子組件間的雙向通信的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • vue中配置scss全局變量的步驟

    vue中配置scss全局變量的步驟

    這篇文章主要介紹了vue中配置scss全局變量的步驟,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • vue面試??贾甤omputed是如何實(shí)現(xiàn)的

    vue面試常考之computed是如何實(shí)現(xiàn)的

    對于每天都在用的計算屬性(computed),小編猜大家肯定也想窺探其奧妙與原理對吧,所以這篇文章就來講講computed是如何實(shí)現(xiàn)的吧,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-08-08
  • Vuex中實(shí)現(xiàn)數(shù)據(jù)狀態(tài)查詢與更改

    Vuex中實(shí)現(xiàn)數(shù)據(jù)狀態(tài)查詢與更改

    今天小編就為大家分享一篇Vuex中實(shí)現(xiàn)數(shù)據(jù)狀態(tài)查詢與更改,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue組件化通訊的實(shí)例代碼

    Vue組件化通訊的實(shí)例代碼

    這篇文章主要介紹了Vue組件化通訊的實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • vue3搭配pinia的踩坑實(shí)戰(zhàn)記錄

    vue3搭配pinia的踩坑實(shí)戰(zhàn)記錄

    Pinia是一個同時支持Vue2和Vue3的應(yīng)用狀態(tài)管理工具,簡單來說就是為了管理整個應(yīng)用中的響應(yīng)式數(shù)據(jù),解決各個組件交互時數(shù)據(jù)狀態(tài)的不好管理的問題,下面這篇文章主要給大家介紹了關(guān)于vue3搭配pinia踩坑的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • vue3中reactive和ref函數(shù)及對比分析

    vue3中reactive和ref函數(shù)及對比分析

    這篇文章主要介紹了vue3中reactive和ref函數(shù)及對比,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • vue生命周期的探索

    vue生命周期的探索

    這篇文章主要介紹了vue生命周期的探索,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue中provide和inject的用法及說明(vue組件爺孫傳值)

    vue中provide和inject的用法及說明(vue組件爺孫傳值)

    這篇文章主要介紹了vue中provide和inject的用法及說明(vue組件爺孫傳值),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論

扶沟县| 西和县| 磐安县| 如皋市| 南丹县| 平潭县| 安溪县| 汉沽区| 高清| 长海县| 木兰县| 石景山区| 萝北县| 永州市| 辽阳县| 东乡县| 特克斯县| 孝感市| 临城县| 萍乡市| 庆阳市| 招远市| 肃北| 九江县| 诸城市| 包头市| 津市市| 岳池县| 建阳市| 武汉市| 西平县| 集安市| 通州市| 安新县| 德兴市| 绥德县| 新津县| 吴桥县| 玛多县| 开封市| 本溪市|