真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Vue3組件間如何通訊

本篇內(nèi)容主要講解“Vue3組件間如何通訊”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Vue3組件間如何通訊”吧!

創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計,眉山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:眉山等地區(qū)。眉山做網(wǎng)站價格咨詢:18980820575

Vue3組件間如何通訊

本文講解 Vue 3.2 組件多種通訊方式的基礎(chǔ)用法,并且使用了  單文件組件

子組件

// Child.vue





const props = defineProps({
  msg: {
    type: String,
    default: ''
  }
})

console.log(props.msg) // 在 js 里需要使用 props.xxx 的方式使用。在 html 中使用不需要 props

子組件

// Child.vue





// 注冊一個自定義事件名,向上傳遞時告訴父組件要觸發(fā)的事件。
const emit = defineEmits(['changeMsg'])

function handleClick() {
  // 參數(shù)1:事件名
  // 參數(shù)2:傳給父組件的值
  emit('changeMsg', '鯊魚辣椒')
}

props 一樣,在

子組件

// Child.vue




import { ref } from 'vue'

const message = ref('蟑螂惡霸')

function changeMessage(data) {
  message.value = data
}

使用 defineExpose 向外暴露指定的數(shù)據(jù)和方法
defineExpose({
  message,
  changeMessage
})

子組件

// Child.vue

Vue3組件間如何通訊

打開控制臺可以看到,屬性被掛到 HTML 元素上了。

多個元素的情況

但在 Vue3 中,組件已經(jīng)沒規(guī)定只能有一個根元素了。如果子組件是多個元素時,上面的例子就不生效了。

// Child.vue

Vue3組件間如何通訊

此時可以使用 $attrs 的方式進行綁定。

// Child.vue

Vue3組件間如何通訊

v-model

v-modelVue 的一個語法糖。在 Vue3 中的玩法就更多(暈)了。

單值的情況

組件上的 v-model 使用 modelValue 作為 prop 和 update:modelValue 作為事件。

v-model 參數(shù)文檔

https://v3.cn.vuejs.org/guide/component-custom-events.html#v-model-%E5%8F%82%E6%95%B0

父組件

// Parent.vue




import { ref } from 'vue'
import Child from './components/Child.vue'

const message = ref('雷猴')

子組件

// Child.vue




import { ref } from 'vue'

// 接收
const props = defineProps([
  'modelValue' // 接收父組件使用 v-model 傳進來的值,必須用 modelValue 這個名字來接收
])

const emit = defineEmits(['update:modelValue']) // 必須用 update:modelValue 這個名字來通知父組件修改值

function handleClick() {
  // 參數(shù)1:通知父組件修改值的方法名
  // 參數(shù)2:要修改的值
  emit('update:modelValue', '噴射河馬')
}

Vue3組件間如何通訊

你也可以這樣寫,更加簡單

子組件

// Child.vue




import { ref } from 'vue'

// 接收
const props = defineProps([
  'modelValue' // 接收父組件使用 v-model 傳進來的值,必須用 modelValue 這個名字來接收
])

多個 v-model 綁定

多個 v-model 綁定 文檔

https://v3.cn.vuejs.org/guide/component-custom-events.html#%E5%A4%9A%E4%B8%AA-v-model-%E7%BB%91%E5%AE%9A

父組件

// Parent.vue




import { ref } from 'vue'
import Child from './components/Child.vue'

const message1 = ref('雷猴')

const message2 = ref('蟑螂惡霸')

子組件

// Child.vue




import { ref } from 'vue'

// 接收
const props = defineProps({
  msg1: String,
  msg2: String
})

const emit = defineEmits(['update:msg1', 'update:msg2'])

function changeMsg1() {
  emit('update:msg1', '鯊魚辣椒')
}

function changeMsg2() {
  emit('update:msg2', '蝎子萊萊')
}

Vue3組件間如何通訊

v-model 修飾符

v-model 還能通過 . 的方式傳入修飾。

v-model 修飾符 文檔

https://v3.cn.vuejs.org/guide/component-custom-events.html#%E5%A4%84%E7%90%86-v-model-%E4%BF%AE%E9%A5%B0%E7%AC%A6

父組件

// Parent.vue




import { ref } from 'vue'
import Child from './components/Child.vue'

const message = ref('hello')

子組件

// Child.vue




import { ref, onMounted } from 'vue'

const props = defineProps([
  'modelValue',
  'modelModifiers'
])

const emit = defineEmits(['update:modelValue'])

onMounted(() => {
  // 判斷有沒有 uppercase 修飾符,有的話就執(zhí)行 toUpperCase() 方法
  if (props.modelModifiers.uppercase) {
    emit('update:modelValue', props.modelValue.toUpperCase())
  }
})

Vue3組件間如何通訊

插槽 slot

插槽可以理解為傳一段 HTML 片段給子組件。子組件將 元素作為承載分發(fā)內(nèi)容的出口。

插槽 文檔

https://v3.cn.vuejs.org/guide/component-slots.html

本文打算講講日常用得比較多的3種插槽:默認插槽、具名插槽、作用域插槽。

默認插槽

插槽的基礎(chǔ)用法非常簡單,只需在 子組件中使用 標(biāo)簽,就會將父組件傳進來的 HTML 內(nèi)容渲染出來。

默認插槽 文檔

https://v3.cn.vuejs.org/guide/component-slots.html#%E6%8F%92%E6%A7%BD%E5%86%85%E5%AE%B9

父組件

// Parent.vue

子組件

// Child.vue

具名插槽

具名插槽就是在 默認插槽的基礎(chǔ)上進行分類,可以理解為對號入座。

具名插槽 文檔

https://v3.cn.vuejs.org/guide/component-slots.html#%E5%85%B7%E5%90%8D%E6%8F%92%E6%A7%BD

Vue3組件間如何通訊

父組件

// Parent.vue



    
  

子組件

// Child.vue

父組件需要使用