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

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

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

組件通信

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

實(shí)踐方法

由于更換新的框架,我們的項(xiàng)目由Avalon更新成Vue.但是為了兼容以前的業(yè)務(wù)代碼,不能直接使用vue的標(biāo)準(zhǔn)實(shí)踐方式,我還是拿過(guò)來(lái)后封裝了一個(gè)vue的class,具體業(yè)務(wù)里面不影響使用,封裝的過(guò)程之后寫(xiě)出來(lái)再聊吧,下面來(lái)總結(jié)一下最近用到的通信實(shí)踐方法。

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

vmodel 中包含了兩個(gè)子組件

<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>

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

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

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

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

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

$children :當(dāng)前實(shí)例的直接子組件。需要注意 $children 并不保證順序,也不是響應(yīng)式的。

$refs :包含了當(dāng)前實(shí)例所有擁有 ref 注冊(cè)的子組件的對(duì)象.

$parent : 當(dāng)前實(shí)例的父實(shí)例。

所以說(shuō),如果在通信方面我們我組件想要調(diào)用子組件,能用的方法只有 $refs 了,因?yàn)?$children 是一個(gè)數(shù)組,并且不保證順序,也沒(méi)有相關(guān)的id去尋找我們需要的那個(gè)特定子組件。但是如果使用 $refs 去尋找特定子組件,那就必須要給那個(gè)子組件注冊(cè) ref 。

父組件的模版

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

父組件

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

子組件

//找到父組件并且調(diào)用它的方法
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)聽(tīng)事件
bus.$on('id-selected', function (id) {
 // ...
})

b.通過(guò)父組件去找兄弟組件

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

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

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

//平行組件之間的通信
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.組件間復(fù)雜數(shù)據(jù)通信Vuex

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

我們來(lái)看這樣一個(gè)布局

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

問(wèn)題:

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

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

寫(xiě)在最后的總結(jié)

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

相關(guān)文章

  • 使用 Vue 3 的 createApp方法初始化應(yīng)用的基本步驟

    使用 Vue 3 的 createApp方法初始化應(yīng)用的基本步驟

    createApp 是 Vue 3 引入的全局 API,用于創(chuàng)建一個(gè)應(yīng)用實(shí)例,這篇文章主要介紹了如何使用 Vue 3 的 createApp方法初始化應(yīng)用,通過(guò) createApp 方法,我們從 Vue 3 的基本初始化開(kāi)始,擴(kuò)展到插件的應(yīng)用、多個(gè)應(yīng)用實(shí)例的創(chuàng)建等,需要的朋友可以參考下
    2024-05-05
  • Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作

    Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作

    這篇文章主要介紹了Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue的生命周期鉤子與父子組件的生命周期詳解

    vue的生命周期鉤子與父子組件的生命周期詳解

    Vue的生命周期就是vue實(shí)例從創(chuàng)建到銷毀的全過(guò)程,也就是new Vue() 開(kāi)始就是vue生命周期的開(kāi)始。Vue 實(shí)例有?個(gè)完整的?命周期,也就是從開(kāi)始創(chuàng)建、初始化數(shù)據(jù)、編譯模版、掛載Dom -> 渲染、更新 -> 渲染、卸載 等?系列過(guò)程,稱這是Vue的?命周期
    2022-08-08
  • 解決VUE項(xiàng)目使用Element-ui 下拉組件的驗(yàn)證失效問(wèn)題

    解決VUE項(xiàng)目使用Element-ui 下拉組件的驗(yàn)證失效問(wèn)題

    這篇文章主要介紹了解決VUE項(xiàng)目使用Element-ui 下拉組件的驗(yàn)證失效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • intellij?idea+vue前端調(diào)試配置圖文教程

    intellij?idea+vue前端調(diào)試配置圖文教程

    在Vue項(xiàng)目開(kāi)發(fā)過(guò)程中,當(dāng)遇到應(yīng)用邏輯出現(xiàn)錯(cuò)誤,但又無(wú)法準(zhǔn)確定位的時(shí)候,知曉Vue項(xiàng)目調(diào)試技巧至關(guān)重要,debug是必備技能,這篇文章主要給大家介紹了關(guān)于intellij?idea+vue前端調(diào)試配置的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • vue自動(dòng)化路由的實(shí)現(xiàn)代碼

    vue自動(dòng)化路由的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue自動(dòng)化路由的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Vue.directive()的用法和實(shí)例詳解

    Vue.directive()的用法和實(shí)例詳解

    這篇文章主要介紹了Vue.directive()的用法和實(shí)例 ,需要的朋友可以參考下
    2018-03-03
  • vue+uniapp瀑布流布局多種實(shí)現(xiàn)方式示例代碼

    vue+uniapp瀑布流布局多種實(shí)現(xiàn)方式示例代碼

    由于使用uniapp開(kāi)發(fā)的微信小程序不需要考慮響應(yīng)式,因此瀑布流的實(shí)現(xiàn)相對(duì)于pc端更為簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于vue+uniapp瀑布流布局多種實(shí)現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Vue3子組件watch無(wú)法監(jiān)聽(tīng)父組件傳遞的屬性值的解決方法

    Vue3子組件watch無(wú)法監(jiān)聽(tīng)父組件傳遞的屬性值的解決方法

    這篇文章主要介紹了Vue3子組件watch無(wú)法監(jiān)聽(tīng)父組件傳遞的屬性值的解決方法,文中通過(guò)代碼示例講解的講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-10-10
  • vue二級(jí)路由設(shè)置方法

    vue二級(jí)路由設(shè)置方法

    下面小編就為大家分享一篇vue二級(jí)路由設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論

澄迈县| 天峻县| 利辛县| 太谷县| 富顺县| 秦皇岛市| 衢州市| 濉溪县| 武清区| 灵寿县| 基隆市| 内江市| 龙泉市| 新竹县| 綦江县| 新和县| 白银市| 新乡县| 新兴县| 汕尾市| 康平县| 三穗县| 平南县| 瑞昌市| 屯门区| 土默特右旗| 肃宁县| 安西县| 定南县| 罗甸县| 沁源县| 湖口县| 兴义市| 石林| 普兰县| 揭东县| 湟中县| 探索| 和林格尔县| 湘西| 乾安县|