国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue 3 第十一章:組件二(組件通信)

這篇具有很好參考價(jià)值的文章主要介紹了Vue 3 第十一章:組件二(組件通信)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 組件的通信

1.1. 父子組件之間的通信

1.1.1 父組件向子組件傳值

方式一:父組件給子組件傳值時(shí),通過v-on綁定屬性實(shí)現(xiàn)

// parent.vue
<template>
  <div>
    父子組件傳值
    <children :msg="msg" :foo="foo"/>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import children from './components/children.vue';

let msg = ref('hello word');
let foo = ref(10);
</script>

<style scoped>

</style>

子組件通過defineProps來接收接收父組件傳遞的值。

  • 使用字符串的形式接收父組件傳遞的值
// children.vue
<template>
  <div class="wrapper">
    這是子組件<br/>
    父?jìng)髯樱簕{ props.msg }} {{ props.foo }}
  </div>
</template>

<script setup lang="ts">
let props = defineProps(['msg', 'foo'])
</script>

<style scoped>

</style>
  • 使用對(duì)象的形式接收父組件傳遞的值
// children.vue
<template>
  <div class="wrapper">
    這是子組件<br/>
    父?jìng)髯樱簕{ props.msg }} {{ props.foo }}
  </div>
</template>

<script setup lang="ts">
let props = defineProps({
  msg: String,
  foo: Number
})
</script>

<style scoped>

</style>
  • 使用對(duì)象的形式接收父組件傳遞的值(含默認(rèn)值及必填參數(shù)設(shè)置)
// children.vue
<template>
  <div class="wrapper">
    這是子組件<br/>
    父?jìng)髯樱簕{ props.msg }} {{ props.foo }}
  </div>
</template>

<script setup lang="ts">
let props = defineProps({
  msg: {
    type: String,
    default: '',
    required: true // 設(shè)置后參數(shù)必傳
  },
  foo: {
    type: Number,
    default: 0
  }
})
</script>

<style scoped>

</style>
  • 結(jié)合 TypeScript 使用
// children.vue
<template>
  <div class="wrapper">
    這是子組件<br/>
    父?jìng)髯樱簕{ props.msg }} {{ props.foo }}
  </div>
</template>

<script setup lang="ts">
let props = defineProps<{
  msg?: string;
  foo: number
}>()
</script>

<style scoped>

</style>

方式二:父組件通過插槽(slot)向子組件傳遞參數(shù)

  • 子組件中通過slot標(biāo)簽傳遞參數(shù)
  • 父組件中通過template插入內(nèi)容,通過v-slot可以接收插槽傳遞的數(shù)據(jù)
<!-- Parent.vue -->
<template>
  <Child>
    <template #default="{ message }">
      {{ message }}
    </template>
  </Child>
</template>

<script>
import Child from './Child.vue'
</script>

<!-- Child.vue -->
<template>
  <div>
    <slot :message="message"></slot>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'
const message = ref('Hello, world!')
</script>

需要注意的是,插槽只能用于傳遞靜態(tài)內(nèi)容,如果需要傳遞動(dòng)態(tài)內(nèi)容,則需要使用props或者provide/inject來實(shí)現(xiàn)。此外,插槽還可以定義多個(gè),并且可以通過name屬性來區(qū)分不同的插槽。

方式三:v-model,子組件可直接修改父組件傳遞過來的值

在Vue3中,可以使用v-model指令來實(shí)現(xiàn)子組件直接修改父組件傳遞過來的值。具體來說,可以在父組件中使用v-model指令將一個(gè)變量與子組件的一個(gè)prop綁定起來,然后在子組件中使用emit方法觸發(fā)一個(gè)名為update:加上prop名字的事件,并傳遞一個(gè)新的值作為參數(shù)。例如:

<!-- VmodelParent.vue -->
<template>
  <div>
    v-model傳參:父組件
    <VmodelChild v-model:isShow="isShow" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import VmodelChild from './components/VmodelChild.vue';

const isShow = ref(false)

</script>

<style scoped>

</style>



<!-- VmodelChild.vue -->
<template>
  <div>
    v-model傳參:子組件
    <button @click="handleClick">點(diǎn)擊修改參數(shù)</button>
    <br />
    {{ props.isShow }}
  </div>
</template>

<script setup lang="ts">
import { defineProps, defineEmits } from 'vue';

const props = defineProps({
  isShow: {
    type: Boolean,
    default: false
  }
})
const emit = defineEmits(["update:isShow"])
const handleClick = () => {
  emit("update:isShow", !props.isShow)
}

</script>

<style scoped>

</style>

1.1.2. 子組件向父組件傳值

子組件向父組件傳值,通過defineEmits實(shí)現(xiàn)

<template>
  <div class="wrapper">
    這是子組件<br/>
    <button @click="emitToParent">click</button>
  </div>
</template>

<script setup lang="ts">
let emit = defineEmits(['event-to-parent'])
let emitToParent = () => {
  emit('event-to-parent', '子組件傳遞給父組件的值')
}

</script>

<style scoped>

</style>

1.2. 兄弟組件之間的通信

Vue 3 中移除了 eventBus,但可以借助第三方工具來完成。Vue 官方推薦使用mitt tiny-emitter。

例子:以mitt為例

1.2.1. 安裝
yarn add mitt -S
1.2.2. 注冊(cè)
  • eventBus.ts
// eventBus.ts
import mitt from 'mitt'

const mitter = mitt();

export default mitter
1.2.3. 使用
  • EventBus.vue
// EventBus.vue
<template>
  <div>
    Event Bus實(shí)現(xiàn)兄弟組件傳參
    <EventBusA />
    <EventBusB />
  </div>
</template>

<script setup lang="ts">
import EventBusA from './components/EventBusA.vue';
import EventBusB from './components/EventBusB.vue';
</script>

<style scoped>

</style>
  • EventBusA.vue
// EventBusA.vue
<template>
  <div class="wrapper">
    兄弟組件A
    <button type="button" @click="handleClick">點(diǎn)擊傳參</button>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import mitter from '@/utils/eventBus'

const msg = ref('Hello, world!')

const handleClick = () => {
  mitter.emit('msg', msg.value)
}

</script>

<style scoped>

</style>
  • EventBusB.vue
// EventBusB.vue
<template>
  <div class="wrapper">
    兄弟組件B
    {{ res }}
  </div>
</template>

<script setup lang="ts">
import mitter from '@/utils/eventBus'
import { ref } from 'vue'

const res = ref()

mitter.on('msg', (data) => {
  res.value = data
})
</script>

<style scoped>

</style>

1.3. 跨級(jí)組件之間的通信

provide/inject來實(shí)現(xiàn)跨級(jí)組件之間的通信

1.3.1 provide/inject
  • parent.vue
// parent.vue
<template>
  <div class="wrapper">
    兄弟組件傳參,這是父組件
    <brotherA />
    <brotherB />
  </div>
</template>

<script setup lang="ts">
import brotherA from './components/brotherA.vue'
import brotherB from './components/brotherB.vue'
import { provide, ref } from 'vue';

let msg = ref('給孫組件傳遞的值');
provide('msg', msg)

</script>

<style scoped>

</style>
  • brotherA.vue
// brotherA.vue
<template>
  <div class="wrapper">
    子組件A
    <grandson />
  </div>
</template>

<script setup lang="ts">
import grandson from "./grandson.vue";
import { ref } from 'vue';


</script>

<style scoped>

</style>
  • brotherB.vue
// brotherB.vue
<template>
  <div class="wrapper">
    子組件B
    {{ msg }}
  </div>
</template>

<script setup lang="ts">
import { inject } from 'vue'

let msg = inject('msg')
</script>

<style scoped>

</style>
  • grandson.vue
// grandson.vue
<template>
  <div class="wrapper">
    這是孫組件
    {{ msg }}
  </div>
</template>

<script setup lang="ts">
import { inject } from 'vue'

let msg = inject('msg')
</script>

<style scoped>

</style>

1.4. 非父子組件之間的通信

1.4.1. Vuex/Pinia

Vuex 和 Pinia 是 Vue 3 中的狀態(tài)管理工具,使用這兩個(gè)工具可以輕松實(shí)現(xiàn)組件通信。由于這兩個(gè)工具都比較強(qiáng)大,后面會(huì)寫文章詳細(xì)講解。

總結(jié)

組件通信是 Vue 中非常重要的一個(gè)概念,它指的是組件之間傳遞數(shù)據(jù)和事件的過程。在 Vue 中,組件通信主要分為父子組件之間的通信和兄弟組件之間的通信兩種情況。
在父子組件之間的通信中,父組件可以通過v-bind來向子組件傳遞數(shù)據(jù),而子組件則可以通過defineProps來接收父組件傳遞的數(shù)據(jù)。同時(shí),子組件也可以通過emit觸發(fā)自定義事件來向父組件傳遞數(shù)據(jù)。
在兄弟組件之間的通信中,可以通過一個(gè)共同的父組件來實(shí)現(xiàn)數(shù)據(jù)的傳遞和事件的觸發(fā),也可以通過 Vuex 等狀態(tài)管理工具來實(shí)現(xiàn)數(shù)據(jù)的共享。
總之,在組件通信的過程中,需要合理地選擇合適的方法來實(shí)現(xiàn)數(shù)據(jù)和事件的傳遞,以實(shí)現(xiàn)組件之間的良好協(xié)作和高效交互。文章來源地址http://www.zghlxwxcb.cn/news/detail-425906.html

到了這里,關(guān)于Vue 3 第十一章:組件二(組件通信)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue組件通信——父子組件通信的四種方法

    Vue組件通信——父子組件通信的四種方法

    全局引入 在main.js文件中引入并注冊(cè) 之后就可以全局使用組件了 局部引入 在父組件中引入 之后就可以在父組件中使用組件了 在子組件 prop 中可以注冊(cè)一些自定義組件屬性,父組件調(diào)用子組件時(shí)可以向 prop 中的自定義屬性傳值。 子組件代碼: 父組件代碼 prop 也可以通過 v-

    2023年04月16日
    瀏覽(101)
  • Vue中父子組件通信

    Vue中父子組件通信

    聚沙成塔·每天進(jìn)步一點(diǎn)點(diǎn) Vue學(xué)習(xí)之旅的奇妙世界 歡迎大家來到 Vue 技能樹參考資料專欄!創(chuàng)建這個(gè)專欄的初衷是為了幫助大家更好地應(yīng)對(duì) Vue.js 技能樹的學(xué)習(xí)。每篇文章都致力于提供清晰、深入的參考資料,讓你能夠更輕松、更自信地理解和掌握 Vue.js 的核心概念和技術(shù)。訂

    2024年01月21日
    瀏覽(92)
  • VUE--組件通信(非父子)

    VUE--組件通信(非父子)

    一、非父子通信? ---? event bus 事件總線 ? ? ? ? 作用:非父子組件之間進(jìn)行 簡(jiǎn)易的消息傳遞 ? ? ? ? 步驟:? ??????????????? ? 1、創(chuàng)建一個(gè)都能訪問到的事件總線(空vue實(shí)例)--- utils/EventBus.js ? ? ? ? ? ? ? ? ? 2、?接收方(A組件),監(jiān)聽Bus實(shí)例的事件 ? ? ? ?

    2024年01月19日
    瀏覽(93)
  • VUE 父子組件、兄弟組件 之間通信 最強(qiáng)詳解

    VUE 父子組件、兄弟組件 之間通信 最強(qiáng)詳解

    目錄 1. 父組件 調(diào)用 子組件 內(nèi)參數(shù)/方法 1.1 通過 ref 調(diào)用/獲取 子組件內(nèi)參數(shù)/方法 2. 子組件 調(diào)用 父組件 內(nèi)參數(shù)/方法 2.1 通過?emit 調(diào)用 父組件方法 2.2 通過?props?調(diào)用 父組件方法/參數(shù) 2.3 通過 this.$parent 調(diào)用 父組件方法/參數(shù) 3. 兄弟組件 通信 3.1 通過?bus 進(jìn)行 兄弟組件 通信

    2024年02月05日
    瀏覽(96)
  • vue3-父子組件間通信

    在實(shí)際業(yè)務(wù)開發(fā)的過程中,我們時(shí)常會(huì)遇到組件間的通信問題,比如:父子組件間通信、同級(jí)組件間通信等。本篇文章中主要介紹父子組件間通信。父子組件間通信主要有以下常見形式: 方案 父組件向子組件 子組件向父組件 props/emits props emits v-model/emits v-model emits ref/emits

    2024年02月05日
    瀏覽(92)
  • Vue3組件間的通信方式

    Vue3組件間的通信方式

    目錄 ?1.props父向子組件通信 2.自定義事件 子向父組件通信 3.全局事件總線 4.v-model組件通信(父子組件數(shù)據(jù)同步) 綁定單個(gè)數(shù)據(jù)同步? 綁定多個(gè)數(shù)據(jù)同步? 5.useAttrs組件通信 ?6.ref與$parent ref獲取子組件實(shí)例對(duì)象 ?$parent獲取父組件實(shí)例對(duì)象 ?7.provide-inject 可以實(shí)現(xiàn)隔輩傳輸 8.

    2024年02月17日
    瀏覽(19)
  • VUE3+TS(父子、兄弟組件通信)

    目錄 父?jìng)髯又?、方法(子調(diào)用父值、方法) 子傳父值(父調(diào)用子值) 父讀子(子傳父)(父調(diào)用子值、方法) 兄弟(任意組件)通信 引入Mitt來完成任意組件通信 1、統(tǒng)一規(guī)范寫法,通過在子組件標(biāo)簽上綁定屬性和值,來傳遞到子組件,子組件再通過defineProps來接收,先給其

    2023年04月08日
    瀏覽(21)
  • vue3 常用的組件互相通信(父子、兄弟、爺孫、任意組件)

    目錄 前言:目前組件通信方法有好多種,我這挑選一部分來講 1、父?jìng)髯?2、子傳父 3、兄弟之間通信 3.1、父組件充當(dāng)中間件 3.2、全局事件總線—EventBus 4、爺孫之間通信 5、任意組件、全局 方案 父?jìng)髯?子傳父 props / emits props emits v-model / emits v-model emits ref / emits ref emits provi

    2024年02月15日
    瀏覽(51)
  • Vue3父子組件間傳參通信

    Vue3父子組件間傳參通信

    本文主要是記錄Vue3在setup語法糖下的父子組件間傳參的四種方式 Vue3+TypeScript 父組件傳值給子組件主要是由父組件為子組件通過v-bind綁定數(shù)值,而后傳給子組件;子組件則通過defineProps接收使用。 如下為父組件 Father.vue 如下為子組件Son.vue 父組件 Father.vue 中在調(diào)用 Son.vue 這個(gè)子

    2024年01月19日
    瀏覽(26)
  • Web前端 ---- 【Vue】(組件)父子組件之間的通信一文帶你了解

    Web前端 ---- 【Vue】(組件)父子組件之間的通信一文帶你了解

    目錄 前言 父組件傳子組件 ---- props 給要傳遞數(shù)據(jù)的子組件綁定要傳過去的屬性及屬性值 在子組件中使用props配置項(xiàng)接收 props配置項(xiàng) 子組件傳父組件 ---- 組件的自定義事件 子組件向父組件傳遞數(shù)據(jù) 通過代碼來綁定自定義事件 本文將介紹在Vue中父子組件如何進(jìn)行通信 這里先介

    2024年02月05日
    瀏覽(631)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包