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

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

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

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

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

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

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

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

使用prop進行數(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ù)據(jù)屬性;

當然,子組件做完相關操作之后,需要時間的是將屬性值dialogFormVisible重新修改為false。若是直接在子組件進行修改的話,就會報錯,因為會影響到父組件的數(shù)據(jù),vue中規(guī)定不能直接對prop的屬性值進行修改。那么就可以用事件觸發(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: {
 // 關閉彈出框
   closeDialog () {
    this.$emit('close', false)  //這里就是直接觸發(fā)子組件的close事件,一旦這個執(zhí)行,父組件中的對應方法就會執(zhí)行。
   }
}
}
// 當那邊觸發(fā)關閉事件的時候,這邊的顯示值就要關閉,那邊會傳過來一個false

// 父組件的事件
export default {
methods: {
 // 當那邊觸發(fā)關閉事件的時候,這邊的顯示值就要關閉,那邊會傳過來一個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>
  添加任務
 </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ā)相應的事件的時候,都會影響到監(jiān)聽的對應組件,如下圖所示。我的解決方案就是給每一個循環(huán)的子組件賦值一個index的值;

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

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

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

相關文章

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

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

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

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

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

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

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

    vue面試??贾甤omputed是如何實現(xiàn)的

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

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

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

    Vue組件化通訊的實例代碼

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

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

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

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

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

    vue生命周期的探索

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

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

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

最新評論

武义县| 宜川县| 塘沽区| 曲周县| 宁陵县| 云安县| 剑河县| 西宁市| 衡水市| 安图县| 赞皇县| 屯留县| 德化县| 大安市| 黄骅市| 理塘县| 富裕县| 南宫市| 九龙坡区| 潼南县| 龙口市| 离岛区| 墨竹工卡县| 铜鼓县| 蒙阴县| 镇巴县| 林甸县| 龙州县| 图木舒克市| 洛浦县| 朝阳县| 宣城市| 慈利县| 亚东县| 佛教| 垦利县| 宜阳县| 改则县| 同德县| 阿坝| 永胜县|