搜尋
首頁web前端js教程Vue組件通訊實務的介紹
Vue組件通訊實務的介紹Jun 30, 2018 pm 05:28 PM
vue組件通信

本篇文章主要介紹了Vue組件通訊實務記錄(推薦),內容挺不錯的,現在分享給大家,也給大家做個參考。

元件通訊

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

實踐方法

由於更換新的框架,我們的專案由Avalon更新成Vue.但是為了相容於先前的業務程式碼,不能直接使用vue的標準實踐方式,我還是拿過來後封裝了一個vue的class,具體業務裡面不影響使用,封裝的過程之後寫出來再聊吧,下面來總結一下最近用到的通信實踐方法。

1.父元件是透過props傳遞資料給子元件

vmodel 中包含了兩個子元件

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

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

#在上面這段程式碼中我們可以看到,定義了兩個子元件,並且使用指定v-bind指令傳遞了數據,子元件會接收到傳遞的資料。

Vue.component(&#39;book-component&#39;, {
 template: tpl,//可以传进来子组件的模板文件
 props: [&#39;book&#39;],
 data: function () {
  return { myBook: this.bookdata }
 }
})

建議接收到單向的props資料後,定義一個局部變數來初始化使用。

2.父元件與子元件之間通訊的其他方式

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

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

$refs :包含了目前實例所有擁有 ref 註冊的子元件的物件.

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

所以說,如果在通訊方面我們我元件想要呼叫子元件,能用的方法只有$refs 了,因為$children 是一個數組,並且不保證順序,也沒有相關的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()
// 触发组件 A 中的事件
bus.$emit(&#39;id-selected&#39;, 1)
// 在组件 B 创建的钩子中监听事件
bus.$on(&#39;id-selected&#39;, 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);
  1. ##4.組件間複雜資料通訊Vuex
  2. 一說到vuex,很多剛開始接觸vue的人會主動避免去使用它,其實它並沒有想像中的那麼複雜。最好的開始是引入vuex後,走一遍給出的小範例。但是如果你的專案不複雜的話,可以不考慮狀態管理,那麼什麼時候需要使用狀態管理呢?

  3. 我們來看這樣一個佈局

如果component1中的某個資料變更,那麼com2,com3也要跟著更新,此時com3中又細分為了三個小組件。

問題:

多個試圖依賴同一個狀態

多層巢狀的元件,當資料變更和程式碼維護困難

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

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網! ######相關推薦:#########Vue2.0 多Tab切換元件的封裝介紹###############Vue新增請求攔截器及vue -resource 攔截器的使用############################

以上是Vue組件通訊實務的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Vue常见面试题汇总(附答案解析)Vue常见面试题汇总(附答案解析)Apr 08, 2021 pm 07:54 PM

本篇文章给大家分享一些Vue面试题(附答案解析)。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

5 款适合国内使用的 Vue 移动端 UI 组件库5 款适合国内使用的 Vue 移动端 UI 组件库May 05, 2022 pm 09:11 PM

本篇文章给大家分享5 款适合国内使用的 Vue 移动端 UI 组件库,希望对大家有所帮助!

vue中props可以传递函数吗vue中props可以传递函数吗Jun 16, 2022 am 10:39 AM

vue中props可以传递函数;vue中可以将字符串、数组、数字和对象作为props传递,props主要用于组件的传值,目的为了接收外面传过来的数据,语法为“export default {methods: {myFunction() {// ...}}};”。

手把手带你利用vue3.x绘制流程图手把手带你利用vue3.x绘制流程图Jun 08, 2022 am 11:57 AM

利用vue3.x怎么绘制流程图?下面本篇文章给大家分享基于 vue3.x 的流程图绘制方法,希望对大家有所帮助!

聊聊vue指令中的修饰符,常用事件修饰符总结聊聊vue指令中的修饰符,常用事件修饰符总结May 09, 2022 am 11:07 AM

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

如何覆盖组件库样式?React和Vue项目的解决方法浅析如何覆盖组件库样式?React和Vue项目的解决方法浅析May 16, 2022 am 11:15 AM

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

通过9个Vue3 组件库,看看聊前端的流行趋势!通过9个Vue3 组件库,看看聊前端的流行趋势!May 07, 2022 am 11:31 AM

本篇文章给大家分享9个开源的 Vue3 组件库,通过它们聊聊发现的前端的流行趋势,希望对大家有所帮助!

react与vue的虚拟dom有什么区别react与vue的虚拟dom有什么区别Apr 22, 2022 am 11:11 AM

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版