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

vue父子組件通信的高級用法示例

 更新時(shí)間:2019年08月29日 08:28:35   作者:我的小熊不見了  
這篇文章主要給大家介紹了關(guān)于vue父子組件通信的高級用法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

vue項(xiàng)目的一大亮點(diǎn)就是組件化。使用組件可以極大地提高項(xiàng)目中代碼的復(fù)用率,減少代碼量。但是使用組件最大的難點(diǎn)就是父子組件之間的通信。

子通信父

父組件

<template>
<div class="parent">
我是父組件
<!--父組件監(jiān)聽子組件觸發(fā)的say方法,調(diào)用自己的parentSay方法-->
<!--通過:msg將父組件的數(shù)據(jù)傳遞給子組件-->
<children :msg="msg" @say="parentSay"></children>
</div>
</template>

<script>
import Children from './children.vue'
export default {
data () {
return {
msg: 'hello, children'
}
},
methods: {
// 參數(shù)就是子組件傳遞出來的數(shù)據(jù)
parentSay(msg){
console.log(msg) // hello, parent
}
},

// 引入子組件
components:{
children: Children
}
}
</script>

子組件

<template>
<div class="hello">
<div class="children" @click="say">
我是子組件
<div>
父組件對我說:{{msg}}
</div>
</div>

</div>
</template>

<script>

export default {
//父組件通過props屬性傳遞進(jìn)來的數(shù)據(jù)
props: {
msg: {
type: String,
default: () => {
return ''
}
}
},
data () {
return {
childrenSay: 'hello, parent'
}
},

methods: {
// 子組件通過emit方法觸發(fā)父組件中定義好的函數(shù),從而將子組件中的數(shù)據(jù)傳遞給父組件
say(){
this.$emit('say' , this.childrenSay);
}
}
}
</script>

子組件使用$emit方法調(diào)用父組件的方法,達(dá)到子通信父的目的。

父通信子

父組件

<!--Html-->
<template>
<!--父組件觸發(fā)click方法-->
<div class="parent" @click="say">
我是父組件
<!--通過ref標(biāo)記子組件-->
<children ref="child"></children>
</div>
</template>

<script>
import Children from './children.vue'
export default {
data () {
return {
msg: "hello,my son"
}
},
methods: {
// 通過$refs調(diào)用子組件的parentSay方法
say(){
this.$refs.child.parentSay(this.msg);
}
},

// 引入子組件
components:{
children: Children
}
}
</script>

子組件

<template>
<div class="hello">
<div class="children" >
我是子組件
<div>
父組件對我說:{{msg}}
</div>
</div>

</div>
</template>

<script>

export default {
data () {
return {
msg: ''
}
},

methods: {
// 父組件調(diào)用的JavaScript方法parentSay
parentSay(msg){
this.msg = msg;
}
}
}
</script>

父組件通過 $refs 調(diào)用子組件的方法。

以上就是父子組件通信的方式,父子組件傳遞數(shù)據(jù)直接用props,或者使用 $emit 和 $refs 依靠事件來傳遞數(shù)據(jù)。

父子組件通信提升篇

上文中,子通信父是在 子中觸發(fā)點(diǎn)擊事件 然后調(diào)用父組件的方法,父通信子是在 父中觸發(fā)點(diǎn)擊事件 調(diào)用子組件的方法。但是實(shí)際情況中可能存在 子通信父時(shí)子組件不允許有點(diǎn)擊事件 而事件在父中或者 父通信子時(shí)點(diǎn)擊事件在子組件 中。

子通信父時(shí)擊事件在父組件

這種情況其實(shí)很常見,例如提交一個表單時(shí)表單的內(nèi)容為子組件,而保存按鈕在父組件上。此時(shí)點(diǎn)擊保存按鈕想要獲取子組件表單的值。這種情況下已經(jīng)不單單是子通信父和父通信子了,需要將兩者結(jié)合在一起使用才能完成整個通信過程。

實(shí)現(xiàn)的思路是在父組件中點(diǎn)擊事件時(shí),先通過父子通信調(diào)用子組件的方法,然后在子組件中的該方法里使用子父通信調(diào)用父組件的另一個方法并將信息傳遞回來。以下是代碼演示:

父組件

<template>
<div class="parent" @click="getData">
我是父組件
<!--父組件監(jiān)聽子組件觸發(fā)的transData方法,調(diào)用自己的transData方法-->
<!--通過ref標(biāo)記子組件-->
<children ref="child" @transData="transData"></children>
</div>
</template>

<script>
import Children from './children.vue'
export default {
data () {
return {
msg: 'hello, children'
}
},
methods: {
getData(){
// 調(diào)用子組件的getData方法
this.$refs.child.getData();
},
// 參數(shù)就是子組件傳遞出來的數(shù)據(jù)
transData(msg){
console.log(msg) // hello, parent
}
},

// 引入子組件
components:{
children: Children
}
}
</script>

子組件

<template>
<div class="hello">
<div class="children" >
我是子組件
<div>
子組件的數(shù)據(jù):{{childrenSay}}
</div>
</div>

</div>
</template>

<script>

export default {
data () {
return {
childrenSay: 'hello, parent'
}
},
methods: {
// 子組件通過emit方法觸發(fā)父組件中定義好的函數(shù),從而將子組件中的數(shù)據(jù)傳遞給父組件
getData() {
this.$emit('transData' , this.childrenSay);
}
}
}
</script>

另一種情況思路也和這個一樣,基礎(chǔ)就在與父通信子和子通信父的靈活運(yùn)用。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • vue-infinite-loading2.0 中文文檔詳解

    vue-infinite-loading2.0 中文文檔詳解

    本篇文章主要介紹了vue-infinite-loading2.0 中文文檔詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Vue中$emit調(diào)用父組件異步方法模擬.then實(shí)現(xiàn)方式

    Vue中$emit調(diào)用父組件異步方法模擬.then實(shí)現(xiàn)方式

    這篇文章主要介紹了Vue中$emit調(diào)用父組件異步方法模擬.then實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Vue 實(shí)現(xiàn)監(jiān)聽窗口關(guān)閉事件,并在窗口關(guān)閉前發(fā)送請求

    Vue 實(shí)現(xiàn)監(jiān)聽窗口關(guān)閉事件,并在窗口關(guān)閉前發(fā)送請求

    這篇文章主要介紹了Vue 實(shí)現(xiàn)監(jiān)聽窗口關(guān)閉事件,并在窗口關(guān)閉前發(fā)送請求,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vue data的數(shù)據(jù)響應(yīng)式到底是如何實(shí)現(xiàn)的

    Vue data的數(shù)據(jù)響應(yīng)式到底是如何實(shí)現(xiàn)的

    這篇文章主要介紹了Vue data的數(shù)據(jù)響應(yīng)式到底是如何實(shí)現(xiàn)的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • vue優(yōu)化之優(yōu)雅的拋出錯誤(Error)問題

    vue優(yōu)化之優(yōu)雅的拋出錯誤(Error)問題

    這篇文章主要介紹了vue優(yōu)化之優(yōu)雅的拋出錯誤(Error)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • uni app仿微信頂部導(dǎo)航條功能

    uni app仿微信頂部導(dǎo)航條功能

    這篇文章主要介紹了uni-app自定義導(dǎo)航欄按鈕|uniapp仿微信頂部導(dǎo)航條功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Vue3中關(guān)于ref和reactive的問題

    Vue3中關(guān)于ref和reactive的問題

    這篇文章主要介紹了Vue3中關(guān)于ref和reactive的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 詳解nuxt路由鑒權(quán)(express模板)

    詳解nuxt路由鑒權(quán)(express模板)

    這篇文章主要介紹了詳解nuxt路由鑒權(quán)(express模板),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 使用WebStorm導(dǎo)入已有Vue項(xiàng)目并運(yùn)行的詳細(xì)步驟與注意事項(xiàng)

    使用WebStorm導(dǎo)入已有Vue項(xiàng)目并運(yùn)行的詳細(xì)步驟與注意事項(xiàng)

    這篇文章主要介紹了如何使用WebStorm導(dǎo)入、運(yùn)行和管理Vue項(xiàng)目,包括環(huán)境配置、Node.js和npm版本管理、項(xiàng)目依賴管理以及常見問題的解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • vue2組件進(jìn)階與插槽詳解(推薦!)

    vue2組件進(jìn)階與插槽詳解(推薦!)

    插槽(slot)作用是讓父組件可以往子組件指定位置插入?html?結(jié)構(gòu),也是組件的一種通信方式,下面這篇文章主要給大家介紹了關(guān)于vue2組件進(jìn)階與插槽的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評論

罗田县| 昌邑市| 徐州市| 柳河县| 开鲁县| 澜沧| 兴和县| 扶沟县| 新和县| 临武县| 南安市| 洛隆县| 平和县| 黑山县| 陆河县| 泸州市| 股票| 虎林市| 农安县| 凤阳县| 汝阳县| 凤庆县| 阿勒泰市| 辉县市| 梅州市| 泽普县| 彰化市| 抚松县| 遵义市| 淮滨县| 秭归县| 镇康县| 思南县| 资溪县| 望都县| 含山县| 锡林郭勒盟| 炎陵县| 桑日县| 平和县| 海安县|