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

Vue子組件調(diào)用父組件的三種方法(附詳細代碼演示)

 更新時間:2025年07月28日 10:05:01   作者:AL.千燈學(xué)長  
我們在使用vue做前端代碼的時候,經(jīng)常出現(xiàn)父組件調(diào)用子組件的場景需求,這篇文章主要介紹了Vue子組件調(diào)用父組件的三種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一、組件通信背景

在Vue開發(fā)中,父子組件通信是常見需求。遵循單向數(shù)據(jù)流原則,子組件通常通過觸發(fā)事件的方式與父組件交互。以下是3種常用方法:

二、方法實現(xiàn)

方法1:$emit觸發(fā)自定義事件(推薦)

原理:子組件通過$emit觸發(fā)事件,父組件通過v-on監(jiān)聽

<!-- 父組件 Parent.vue -->
<template>
  <Child @show-message="handleMessage" />
</template>

<script>
export default {
  methods: {
    handleMessage(msg) {
      console.log('收到子組件消息:', msg)
    }
  }
}
</script>

<!-- 子組件 Child.vue -->
<template>
  <button @click="sendMessage">發(fā)送消息</button>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('show-message', 'Hello from Child!')
    }
  }
}
</script>

方法2:通過Props傳遞回調(diào)函數(shù)

原理:父組件通過props傳遞函數(shù),子組件直接調(diào)用

<!-- 父組件 Parent.vue -->
<template>
  <Child :callback="handleCallback" />
</template>

<script>
export default {
  methods: {
    handleCallback(data) {
      console.log('回調(diào)數(shù)據(jù):', data)
    }
  }
}
</script>

<!-- 子組件 Child.vue -->
<template>
  <button @click="executeCallback">執(zhí)行回調(diào)</button>
</template>

<script>
export default {
  props: ['callback'],
  methods: {
    executeCallback() {
      this.callback({ status: 'success' })
    }
  }
}
</script>

方法3:使用v-model/.sync(雙向綁定)

原理:通過雙向綁定語法糖實現(xiàn)數(shù)據(jù)同步(Vue2/Vue3實現(xiàn)不同)

Vue2實現(xiàn):

<!-- 父組件 Parent.vue -->
<template>
  <Child v-model="message" />
  <!-- 或 -->
  <Child :visible.sync="dialogVisible" />
</template>

<script>
export default {
  data() {
    return {
      message: '',
      dialogVisible: false
    }
  }
}
</script>

<!-- 子組件 Child.vue -->
<script>
export default {
  props: ['value'], // v-model默認prop
  methods: {
    updateValue() {
      this.$emit('input', 'new value')
    },
    closeDialog() {
      this.$emit('update:visible', false)
    }
  }
}
</script>

Vue3實現(xiàn):

<!-- 父組件 Parent.vue -->
<template>
  <Child v-model:message="msg" />
</template>

<!-- 子組件 Child.vue -->
<script setup>
const props = defineProps(['message'])
const emit = defineEmits(['update:message'])

const update = () => {
  emit('update:message', 'new value')
}
</script>

三、方法對比

方法適用場景優(yōu)點注意事項
$emit常規(guī)事件通信符合Vue設(shè)計模式,直觀清晰事件名需保持一致
Props回調(diào)需要傳遞多個函數(shù)時類似React模式,靈活度高需注意函數(shù)引用穩(wěn)定性
v-model表單組件/雙向綁定需求語法簡潔,減少代碼量Vue2/Vue3實現(xiàn)方式不同
.sync修飾符多個prop需要雙向綁定(Vue2特有)簡化多個prop更新邏輯Vue3中已合并到v-model語法

四、最佳實踐建議

  1. 優(yōu)先使用$emit:符合Vue的事件驅(qū)動設(shè)計理念
  2. 復(fù)雜場景使用Vuex/Pinia:跨層級組件通信建議使用狀態(tài)管理工具
  3. 注意版本差異
    • Vue2使用.sync需要顯式聲明
    • Vue3使用v-model:propName形式
  4. 保持單向數(shù)據(jù)流:避免直接修改父組件傳遞的props

五、常見應(yīng)用場景

  1. 表單提交數(shù)據(jù)回傳
  2. 模態(tài)框關(guān)閉控制
  3. 列表項狀態(tài)更新
  4. 復(fù)雜組件的狀態(tài)聯(lián)動

到此這篇關(guān)于Vue子組件調(diào)用父組件的三種方法的文章就介紹到這了,更多相關(guān)Vue子組件調(diào)用父組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue中如何動態(tài)獲取剩余區(qū)域的滾動高度

    vue中如何動態(tài)獲取剩余區(qū)域的滾動高度

    這篇文章主要介紹了vue中如何動態(tài)獲取剩余區(qū)域的滾動高度問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue路由跳轉(zhuǎn)方式區(qū)別匯總(push,replace,go)

    Vue路由跳轉(zhuǎn)方式區(qū)別匯總(push,replace,go)

    vue項目中點擊router-link標簽鏈接都屬于聲明式導(dǎo)航。vue項目中編程式導(dǎo)航有this.$router.push(),this.$router.replace(),this.$router.go()???????。這篇文章主要介紹了Vue路由跳轉(zhuǎn)方式區(qū)別匯總(push,replace,go)
    2022-12-12
  • vue下載文件以及文件重命名方式

    vue下載文件以及文件重命名方式

    這篇文章主要介紹了vue下載文件以及文件重命名方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue3中v-model的用法詳解

    vue3中v-model的用法詳解

    vue 提供了很多自定義指令,大大方便了我們的開發(fā),其中最常用的也就是 v-model,他可以在組件上使用以實現(xiàn)雙向綁定。它可以綁定多種數(shù)據(jù)結(jié)構(gòu), 今天總結(jié)一下用法
    2023-04-04
  • Vue切換div顯示隱藏,多選,單選代碼解析

    Vue切換div顯示隱藏,多選,單選代碼解析

    這篇文章主要介紹了Vue切換div顯示隱藏,多選,單選代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Vue中router-view無法顯示的解決辦法

    Vue中router-view無法顯示的解決辦法

    這篇文章主要給大家介紹了關(guān)于Vue中router-view無法顯示的解決辦法,router-view組件作為vue最核心的路由管理組件,在項目中作為路由管理經(jīng)常被使用到,需要的朋友可以參考下
    2023-07-07
  • vue如何定義全局顏色變量并用js修改顏色三種方法

    vue如何定義全局顏色變量并用js修改顏色三種方法

    在Vue中定義一個全局變量是非常常見的需求,這樣可以在多個組件中共享相同的數(shù)據(jù),這篇文章主要介紹了vue如何定義全局顏色變量并用js修改顏色的三種方法,需要的朋友可以參考下
    2025-05-05
  • vue.js實現(xiàn)點擊后動態(tài)添加class及刪除同級class的實現(xiàn)代碼

    vue.js實現(xiàn)點擊后動態(tài)添加class及刪除同級class的實現(xiàn)代碼

    這篇文章主要介紹了vue.js實現(xiàn)點擊后動態(tài)添加class及刪除同級class的相關(guān)資料,需要的朋友可以參考下
    2018-04-04
  • vue實現(xiàn)圖片上傳預(yù)覽功能

    vue實現(xiàn)圖片上傳預(yù)覽功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)圖片上傳預(yù)覽功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 前端vue+elementUI如何實現(xiàn)記住密碼功能

    前端vue+elementUI如何實現(xiàn)記住密碼功能

    這篇文章主要給大家介紹了關(guān)于vue+elementUI如何實現(xiàn)記住密碼功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論