欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue.js組件通信的幾種姿勢(shì)

 更新時(shí)間:2017年10月23日 08:56:57   投稿:mrr  
組件 (Component) 是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼。下面通過本文給大家分享Vue.js組件通信的幾種姿勢(shì),感興趣的朋友一起看看吧

寫在前面

因?yàn)閷?duì)Vue.js很感興趣,而且平時(shí)工作的技術(shù)棧也是Vue.js,這幾個(gè)月花了些時(shí)間研究學(xué)習(xí)了一下Vue.js源碼,并做了總結(jié)與輸出。

文章的原地址: https://github.com/answershuto/learnVue 。

在學(xué)習(xí)過程中,為Vue加上了中文的注釋 https://github.com/answershuto/learnVue/tree/master/vue-src ,希望可以對(duì)其他想學(xué)習(xí)Vue源碼的小伙伴有所幫助。

可能會(huì)有理解存在偏差的地方,歡迎提issue指出,共同學(xué)習(xí),共同進(jìn)步。

什么是Vue組件?

組件 (Component) 是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼。在較高層面上,組件是自定義元素,Vue.js 的編譯器為它添加特殊功能。在有些情況下,組件也可以是原生 HTML 元素的形式,以 is 特性擴(kuò)展。

Vue組件間通信

父組件向子組件通信

方法一:props

使用 props ,父組件可以使用props向子組件傳遞數(shù)據(jù)。

父組件vue模板father.vue

<template>
  <child :msg="message"></child>
</template>
<script>
import child from './child.vue';
export default {
  components: {
    child
  },
  data () {
    return {
      message: 'father message';
    }
  }
}
</script>

子組件vue模板child.vue

<template>
  <div>{{msg}}</div>
</template>
<script>
export default {
  props: {
    msg: {
      type: String,
      required: true
    }
  }
}
</script>

方法二 使用$children

使用 $children 可以在父組件中訪問子組件。

子組件向父組件通信

方法一:使用 vue事件

父組件向子組件傳遞事件方法,子組件通過$emit觸發(fā)事件,回調(diào)給父組件。

父組件vue模板father.vue

<template>
  <child @msgFunc="func"></child>
</template>
<script>
import child from './child.vue';
export default {
  components: {
    child
  },
  methods: {
    func (msg) {
      console.log(msg);
    }
  }
}
</script>

子組件vue模板child.vue

<template>
  <button @click="handleClick">點(diǎn)我</button>
</template>
<script>
export default {
  props: {
    msg: {
      type: String,
      required: true
    }
  },
  methods () {
    handleClick () {
      //........
      this.$emit('msgFunc');
    }
  }
}
</script>

方法二: 通過修改父組件傳遞的props來修改父組件數(shù)據(jù)

這種方法只能在父組件傳遞一個(gè)引用變量時(shí)可以使用,字面變量無法達(dá)到相應(yīng)效果。因?yàn)轱嬘米兞孔罱K無論是父組件中的數(shù)據(jù)還是子組件得到的props中的數(shù)據(jù)都是指向同一塊內(nèi)存地址,所以修改了子組件中props的數(shù)據(jù)即修改了父組件的數(shù)據(jù)。

但是并不推薦這么做,并不建議直接修改props的值,如果數(shù)據(jù)是用于顯示修改的,在實(shí)際開發(fā)中我經(jīng)常會(huì)將其放入data中,在需要回傳給父組件的時(shí)候再用事件回傳數(shù)據(jù)。這樣做保持了組件獨(dú)立以及解耦,不會(huì)因?yàn)槭褂猛环輸?shù)據(jù)而導(dǎo)致數(shù)據(jù)流異?;靵y,只通過特定的接口傳遞數(shù)據(jù)來達(dá)到修改數(shù)據(jù)的目的,而內(nèi)部數(shù)據(jù)狀態(tài)由專門的data負(fù)責(zé)管理。

方法三:使用$parent

使用 $parent 可以訪問父組件的數(shù)據(jù)。

非父子組件、兄弟組件之間的數(shù)據(jù)傳遞

非父子組件通信,Vue官方推薦 使用一個(gè)Vue實(shí)例作為中央事件總線 。

Vue內(nèi)部有一個(gè)事件機(jī)制,可以參考 源碼

$on方法用來監(jiān)聽一個(gè)事件。

$emit用來觸發(fā)一個(gè)事件。

/*新建一個(gè)Vue實(shí)例作為中央事件總嫌*/
let event = new Vue();
/*監(jiān)聽事件*/
event.$on('eventName', (val) => {
  //......do something
});
/*觸發(fā)事件*/
event.$emit('eventName', 'this is a message.');

多層級(jí)父子組件通信:

在Vue1.0中實(shí)現(xiàn)了$broadcast與$dispatch兩個(gè)方法用來向子組件(或父組件)廣播(或派發(fā)),當(dāng)子組件(或父組件)上監(jiān)聽了事件并返回true的時(shí)候會(huì)向爺孫級(jí)組件繼續(xù)廣播(或派發(fā))事件。但是這個(gè)方法在Vue2.0里面已經(jīng)被移除了。

之前在學(xué)習(xí)餓了么的開源組件庫(kù) element 的時(shí)候發(fā)現(xiàn)他們重新實(shí)現(xiàn)了broadcast以及dispatch的方法,以mixin的方式引入,具體可以參考 《說說element組件庫(kù)broadcast與dispatch》 。但是跟Vue1.0的兩個(gè)方法實(shí)現(xiàn)有略微的不同。這兩個(gè)方法實(shí)現(xiàn)了向子孫組件事件廣播以及向多層級(jí)父組件事件派發(fā)的功能。但是并非廣義上的事件廣播,它需要指定一個(gè)commentName進(jìn)行向指定組件名組件定向廣播(派發(fā))事件。

其實(shí)這兩個(gè)方法內(nèi)部實(shí)現(xiàn)還是用到的還是$parent以及$children,用以遍歷子節(jié)點(diǎn)或是逐級(jí)向上查詢父節(jié)點(diǎn),訪問到指定組件名的時(shí)候,調(diào)用$emit觸發(fā)指定事件。

復(fù)雜的單頁(yè)應(yīng)用數(shù)據(jù)管理

當(dāng)應(yīng)用足夠復(fù)雜情況下,請(qǐng)使用 vuex 進(jìn)行數(shù)據(jù)管理。

總結(jié)

以上所述是小編給大家介紹的Vue.js組件通信的幾種姿勢(shì),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解Vue3的虛擬DOM是如何生成的

    詳解Vue3的虛擬DOM是如何生成的

    這篇文章給大家詳細(xì)介紹了 Vue3 的虛擬DOM生成規(guī)則,文章通過代碼示例和圖片介紹的非常詳細(xì),具有一定的參考價(jià)值,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • 淺談Vue.js 1.x 和 2.x 實(shí)例的生命周期

    淺談Vue.js 1.x 和 2.x 實(shí)例的生命周期

    下面小編就為大家?guī)硪黄獪\談Vue.js 1.x 和 2.x 實(shí)例的生命周期。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • vue指令防止按鈕連點(diǎn)解析

    vue指令防止按鈕連點(diǎn)解析

    這篇文章主要介紹了vue指令防止按鈕連點(diǎn)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解vue中router-view組件的生成原理

    詳解vue中router-view組件的生成原理

    在vue的使用過程中,有一個(gè)組件,幾乎是必用的,那就是router-view,它是所有組件的入口,是單頁(yè)面系統(tǒng)的一把利劍,如果你的系統(tǒng)是火箭,那么router-view無疑將是這艘火箭的北斗衛(wèi)星,本文將給大家介紹vue中的router-view組件是如何生成的,感興趣的朋友可以參考下
    2024-01-01
  • vue router 組件的高級(jí)應(yīng)用實(shí)例代碼

    vue router 組件的高級(jí)應(yīng)用實(shí)例代碼

    這篇文章主要介紹了vue-router 組件的高級(jí)應(yīng)用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • vue如何基于el-table實(shí)現(xiàn)多頁(yè)多選及翻頁(yè)回顯過程

    vue如何基于el-table實(shí)現(xiàn)多頁(yè)多選及翻頁(yè)回顯過程

    在最近的一個(gè)項(xiàng)目中我需要實(shí)現(xiàn)表格的翻頁(yè),并且還要實(shí)現(xiàn)全選、多選功能,下面這篇文章主要給大家介紹了關(guān)于vue如何基于el-table實(shí)現(xiàn)多頁(yè)多選及翻頁(yè)回顯過程的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • VUE-ElementUI 自定義Loading圖操作

    VUE-ElementUI 自定義Loading圖操作

    這篇文章主要介紹了VUE-ElementUI 自定義Loading圖操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue實(shí)現(xiàn)圖片滑動(dòng)驗(yàn)證

    vue實(shí)現(xiàn)圖片滑動(dòng)驗(yàn)證

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)圖片滑動(dòng)驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue的緩存方法示例詳解

    Vue的緩存方法示例詳解

    這篇文章主要給大家介紹了關(guān)于Vue緩存方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Vue基礎(chǔ)知識(shí)快速入門教程

    Vue基礎(chǔ)知識(shí)快速入門教程

    這篇文章主要介紹了Vue基礎(chǔ)知識(shí)快速入門教程,我們可以先學(xué)會(huì)用,使用一段時(shí)間之后,回頭來熟悉一下Vue框架以及它的特點(diǎn),需要的朋友可以參考下
    2023-05-05

最新評(píng)論