亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue組件通信實踐記錄(推薦)

 更新時間:2017年08月15日 15:26:49   作者:cayley  
本篇文章主要介紹了Vue組件通信實踐記錄(推薦),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

組件通信

幾乎所有的mvvm框架中都要涉及組件通信的功能(吐槽一下knockout,畢竟是鼻祖就先不說它了)。而且目前的前端形式來看,組件化是一個項目的基礎。所以選好一個合適的框架后,隨著組件的不斷增加,業(yè)務的復雜度提升,組件之間的通信變得尤為重要。

實踐方法

由于更換新的框架,我們的項目由Avalon更新成Vue.但是為了兼容以前的業(yè)務代碼,不能直接使用vue的標準實踐方式,我還是拿過來后封裝了一個vue的class,具體業(yè)務里面不影響使用,封裝的過程之后寫出來再聊吧,下面來總結一下最近用到的通信實踐方法。

1.父組件是通過props傳遞數(shù)據給子組件

vmodel 中包含了兩個子組件

<div class="w-base">
  <book-component v-bind:bookdata="book"></book-component>
</div>

<div class="base">
  <node-component v-bind:catalog="catalog" ></node-component>
</div>

在上面這段代碼中我們可以看到,定義了兩個子組件,并且使用指定v-bind指令傳遞了數(shù)據,子組件會接收到傳遞的數(shù)據。

Vue.component('book-component', {
 template: tpl,//可以傳進來子組件的模板文件
 props: ['book'],
 data: function () {
  return { myBook: this.bookdata }
 }
})

建議接收到單向的props數(shù)據后,定義一個局部變量來初始化使用。

2.父組件與子組件之間通信的其他方式

vue中給實例提供了三個我們可用的API $children 和 $refs 以及 $parent 。

$children :當前實例的直接子組件。需要注意 $children 并不保證順序,也不是響應式的。

$refs :包含了當前實例所有擁有 ref 注冊的子組件的對象.

$parent : 當前實例的父實例。

所以說,如果在通信方面我們我組件想要調用子組件,能用的方法只有 $refs 了,因為 $children 是一個數(shù)組,并且不保證順序,也沒有相關的id去尋找我們需要的那個特定子組件。但是如果使用 $refs 去尋找特定子組件,那就必須要給那個子組件注冊 ref 。

父組件的模版

<!-- vm.$refs.child will be the child comp instance -->
<child-component ref="child"></child-comp>

父組件

//找到子組件并且調用它的方法
var myChild = this.$refs.child;
mymyChild.func();

子組件

//找到父組件并且調用它的方法
var myParent = this.$parent;
mymyChild.func();

3.平行組件之間的兩種通信方式

a.官方提供的事件bus

var bus = new Vue()
// 觸發(fā)組件 A 中的事件
bus.$emit('id-selected', 1)
// 在組件 B 創(chuàng)建的鉤子中監(jiān)聽事件
bus.$on('id-selected', function (id) {
 // ...
})

b.通過父組件去找兄弟組件

//找到父組件的$refs對象,然后找到組件的兄弟組件
 var $refs = this.$parent?this.$parent.$refs:{};
 var childComponent = $refs.child; //child為改組件的ref屬性值

其實以上兩種方法最好的實踐方式是封裝到項目的基類中,這樣不用每次都去定義一個空Vue()實例,而是每個實例的基類中都有這個事件bus。同樣可以封裝找到其他兄弟組件的方法,但是該兄弟組件必須注冊ref

下面這個方法是我在項目中封裝的用于找到父組件,然后再去找到兄弟組件的方法。

//平行組件之間的通信
getComponentByRef: function(refId) {
  var $refs = this.$parent?this.$parent.$refs:{};
  for (var $id in $refs) {
    if ($id == refId) {
      return $refs[$id];
    }
  }
  return null;
}

使用

//在組件中直接使用
this.getComponentByRef("booknode").updateNode(this.node);

4.組件間復雜數(shù)據通信Vuex

一說到vuex,很多剛開始接觸vue的人會主動避免去使用它,其實它并沒有想象中的那么復雜。最好的開始是引入vuex后,走一遍給出的小示例。但是如果你的項目并不復雜的話,可以不考慮狀態(tài)管理,那么什么時候需要使用狀態(tài)管理呢?

我們來看這樣一個布局

如果component1中的某個數(shù)據變更,那么com2,com3也要跟著更新,此時com3中又細分為了三個小組件。

問題:

  1. 多個試圖依賴同一個狀態(tài)
  2. 多層嵌套的組件,數(shù)據變更和代碼維護困難

那這樣的情況時,我們可以考慮使用狀態(tài)管理。下一篇文章將詳細講解關于vuex的實踐和理解。

寫在最后的總結

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

相關文章

  • 在Linux服務器上部署vue項目

    在Linux服務器上部署vue項目

    這篇文章介紹了在Linux服務器上部署vue項目的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-11-11
  • vue使用vue-json-viewer展示JSON數(shù)據的詳細步驟

    vue使用vue-json-viewer展示JSON數(shù)據的詳細步驟

    最近在開發(fā)一個公司的投放管理系統(tǒng)的操作日志模塊,要查看某條操作日志的請求參數(shù),要將請求的參數(shù)以JSON格式的形式展示出來,下面這篇文章主要給大家介紹了vue使用vue-json-viewer展示JSON數(shù)據的相關資料,需要的朋友可以參考下
    2022-09-09
  • Vite使用unplugin-auto-import實現(xiàn)vue3中的自動導入

    Vite使用unplugin-auto-import實現(xiàn)vue3中的自動導入

    本文主要介紹了Vite使用unplugin-auto-import實現(xiàn)vue3中的自動導入,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • vue采用EventBus實現(xiàn)跨組件通信及注意事項小結

    vue采用EventBus實現(xiàn)跨組件通信及注意事項小結

    EventBus是一種發(fā)布/訂閱事件設計模式的實踐。這篇文章主要介紹了vue采用EventBus實現(xiàn)跨組件通信及注意事項,需要的朋友可以參考下
    2018-06-06
  • Vue3渲染器與編譯器深入淺析

    Vue3渲染器與編譯器深入淺析

    這篇文章主要為大家介紹了Vue3渲染器與編譯器深入淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 非Vuex實現(xiàn)的登錄狀態(tài)判斷封裝實例代碼

    非Vuex實現(xiàn)的登錄狀態(tài)判斷封裝實例代碼

    這篇文章主要給大家介紹了關于非Vuex實現(xiàn)的登錄狀態(tài)判斷封裝的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • 深入理解Vue nextTick 機制

    深入理解Vue nextTick 機制

    這篇文章主要介紹了深入理解Vue nextTick 機制,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • vue全局接入百度地圖的實現(xiàn)示例

    vue全局接入百度地圖的實現(xiàn)示例

    本文主要介紹了vue全局接入百度地圖的實現(xiàn)示例,文中根據實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue中的this.$refs,this.$emit,this.$store,this.$nextTick的使用方式

    vue中的this.$refs,this.$emit,this.$store,this.$nextTick的使用方式

    這篇文章主要介紹了vue中的this.$refs,this.$emit,this.$store,this.$nextTick的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Vue項目中實現(xiàn)ElementUI按需引入過程解析

    Vue項目中實現(xiàn)ElementUI按需引入過程解析

    這篇文章主要介紹了Vue項目中實現(xiàn)ElementUI按需引入,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05

最新評論