国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Vue3 + TS + Vite 父子組件間如何通信?

開發 前端
在父組件內給子組件傳值時,通過 V-Bind 綁定一個數據,然后子組件使用 DefineProps 接收數據。

組件之間傳值,大家都很熟悉,涉及到 VUE3 +TS 好多同學就無從下手了,所以分享這篇文章,希望看完后提起 VUE3+TS 能夠不慌不忙。

平時使用的函數如:ref、reactive、watch、computed 等需要先引入才能使用,但是本篇文章介紹的 defineProps、withDefaults、defineEmits、defineExpose 都是開箱即用的函數,無需引入。

父向子傳值:defineProps

在父組件內給子組件傳值時,通過 v-bind 綁定一個數據,然后子組件使用 defineProps 接收數據。

可以傳遞的數據有兩種:字符串類型 和 非字符串類型。字符串類型不需要 v-bind,非字符串需要使用 v-bind,可以簡寫成冒號(:)。

/*  父組件代碼 */<template>  父組件  <child-com title="父組件向子組件傳值" :list="list"></child-com></template><script lang="ts" setup>import ChildCom from './component/ChildCom.vue'const list: Array<number> = [1, 2, 3, 4, 5]</script>

子組件接收的時候使用 defineProps,需要注意的是我們使用 TS 需要加類型限制,如果不是 TS 的可以直接使用。

TS 語法使用:

defineProps<{title: string;  data: number[]}>()

非 TS 語法使用:

defineProps({title: {    default: "",    type: string  },  list: Array})

對應上邊父組件傳值,使用 TS 語法接收的子組件代碼為:

<template>  子組件  {{ title }}  {{ list }}</template><script lang="ts" setup>interface DefineProp {  title: string  list: Array<number>}defineProps<DefineProp>()</script>

默認值:withDefaults

在非 TS 語法中,default 可以設置默認值,在 TS 語法中,如何設置默認值呢?

withDefaults 是一個無需引入開箱即用的函數,可以接收兩個參數,第一個用于defineProps 接收參數,第二個參數是一個對象用于設置默認值。

使用方式1:分離模式

type Props = {title?: string;  list?: number[]}withDefaults(defineProps<Props>(), {title: "默認值",  list: () => [1, 2]})

使用方式2:組合模式

widthDefault(defineProps<{ title?: string, list?: number[] }>(),  {title: "默認值",  list: () => [1, 2]})

給上邊的子組件添加默認值代碼如下:

<template>  子組件  <br />  {{ title }}  <br />  {{ list }}</template><script lang="ts" setup>interface DefineProp  {  title?: string  list?: Array<number>}withDefaults(defineProps<DefineProp>(), {  title: '設置title默認值',  list: () => [1, 2],})</script>

將父組件中傳的值刪除掉之后,發現設置的默認值就展示出來了。

子向父傳值:defineEmits

子組件給父組件進行傳值時,都是通過派發事件,去觸發父組件中的事件并接收值。

在子組件綁定一個 @click 事件,然后通過 defineEmits 注冊自定義事件,當點擊 @click 事件時觸發 emit 去調用注冊事件,然后傳遞參數。

非 TS 聲明語法

// clickname 父組件自定義事件名let emit = defineEmits([ 'clickname' ])const postV = () => {emit('clickname', '傳遞的值或變量')}

TS 聲明語法

// clickname 父組件自定義事件名let emit = defineEmits<{(e: 'clickname', str: string): void}>()const postV = (str: string): void => {emit('clickname', str)}

如果是多個自定義事件,寫法如下:

type Person = {  name: string  age: number}let emit = defineEmits<{  (e: 'clickname', str: string): void  (e: 'getData', per: Person): void}>()const postV = (str: string): void => {emit('clickname', str)}const postVData = (per: Person): void => {emit('getData', per)}

我們在子組件內,使用 defineEmits 添加派發事件:

<template>  子組件  <button @click="postV">子向父傳值</button>  <button @click="postVal('傳遞字符串')">子向父傳data</button></template><script lang="ts" setup>import { reactive } from 'vue'// 子向父傳值type Person = {  name: string  age: number}const per = reactive<Person>({  name: 'qq',  age: 18,})const emit = defineEmits<{  (e: 'clickname', per: Person): void  (e: 'getData', data: string): void}>()const postV = (per: Person): void => {  emit('clickname', per)}const postVal = (data: string): void => {  emit('getData', data)}</script>

父組件內使用自定義事件,接收子組件傳遞來的數據:

<template>  父組件  <child-com    @clickname="getChildVal"    @getData="getChildData"  ></child-com></template><script lang="ts" setup>iimport ChildCom from './component/ChildCom.vue'const getChildVal = (per: { name: string; age: number }): void => {  console.log('per:', per)}const getChildData = (data: string): void => {  console.log('data', data)}</script>

defineExpose

子組件向父組件傳值時,除了使用 defineEmits 之后,也可以使用 defineExpose ,它是通過把組件自己的屬性暴露出去,父組件先獲取到子組件,再獲取屬性值。

defineExpose 接收一個對象參數,包含需要傳遞的屬性。

defineExpose({name,  count,  ....})

在子組件內,定義和暴露需要傳遞的屬性:

<template>  子組件</template><script lang="ts" setup>const count: number = 1defineExpose({  count,})</script>

在父組件內使用 ref 獲取到子組件,然后打印屬性:

<template>  父組件  <child-com ref="child"></child-com>  <button @click="getProp">獲取子組件屬性</button></template><script lang="ts" setup>import ChildCom from './component/ChildCom.vue'import { ref } from 'vue'const child: HTMLElement = ref()const getProp = (): void => {  console.log(child.value.count)}</script>
責任編輯:姜華 來源: 今日頭條
相關推薦

2024-01-09 08:34:56

Vue3.js組件通信

2022-07-28 08:26:18

Vue3Uni-appVite

2022-08-26 10:01:48

Vue3TS

2022-03-11 12:31:04

Vue3組件前端

2023-11-28 09:03:59

Vue.jsJavaScript

2019-05-29 14:23:53

Vue.js組件通信

2024-01-23 09:15:33

Vue3組件拖拽組件內容編輯

2022-08-15 07:34:36

vite項目Vue3

2022-12-12 08:56:45

Vite3Vite

2023-04-18 09:17:40

父子組件Vue

2024-08-13 09:26:07

2020-12-01 08:34:31

Vue3組件實踐

2022-07-29 11:03:47

VueUni-app

2021-12-02 05:50:35

Vue3 插件Vue應用

2021-05-18 07:51:37

Suspense組件Vue3

2019-05-15 08:00:00

vue組件間通信前端

2024-10-18 10:49:03

Actions異步函數

2022-08-09 10:00:57

ViteTypeScripVue3

2021-12-01 08:11:44

Vue3 插件Vue應用

2021-09-15 08:09:43

前端技術編程
點贊
收藏

51CTO技術棧公眾號

国产一区二区在线看| 国产自产视频一区二区三区 | 国产成人精品福利一区二区三区 | 奇米影视888狠狠狠777不卡| 日本不卡在线播放| 亚洲成人精品综合在线| 欧美色电影在线| 成人免费淫片在线费观看| 伊人久久大香伊蕉在人线观看热v| 欧美日韩亚洲激情| 国产自偷自偷免费一区| 快播电影网址老女人久久| 欧美午夜精品久久久久久久| 无码精品a∨在线观看中文| 99riav国产精品| 国产精品视频自拍| 成人知道污网站| 国产精品视频yy9299一区| 日韩免费av一区二区三区| 日韩久久视频| 亚洲国产精品久久人人爱蜜臀| 欧美在线一级视频| 日韩pacopacomama| 欧美一区二区三区视频在线| 视频在线观看你懂的| 亚洲欧洲色图综合| 亚洲理伦在线| 亚洲视频在线一区观看| 五月丁香综合缴情六月小说| 成人软件在线观看| 日韩美女视频一区二区在线观看| 欧美18一12sex性处hd| 国产精品毛片高清在线完整版| 国产欧美日韩网站| 成人av电影在线网| 国产一区二区网| 成人高清伦理免费影院在线观看| 一区二区三区av| 日本不卡123| 女人一区二区三区| 久久久久久黄| 婷婷四月色综合| 精品久久在线| 欧美激情一区二区三区在线| 很污的网站在线观看| 精品一区二区三区久久| 一区高清视频| 国产精品996| 无码播放一区二区三区| 亚洲精品白浆高清| 欧美亚洲禁片免费| 免费在线毛片| 欧美人体做爰大胆视频| 波多野结衣 作品| 无码日韩精品一区二区免费| 国内精品模特av私拍在线观看| 久久国产精品免费一区二区三区| 日韩专区在线播放| bdsm精品捆绑chinese| 亚洲精品久久嫩草网站秘色| 老司机很黄的视频免费| 日本中文字幕一区二区有限公司| 日本不卡久久| 九一九一国产精品| 精品视频免费在线播放| 国产精品理论片在线观看| 500福利第一精品导航| 在线视频欧美精品| freexxx性亚洲精品| 国产午夜精品在线观看| av无码精品一区二区三区| 亚洲欧洲日韩综合一区二区| 青青草超碰在线| 秋霞国产精品| 8x8x8国产精品| 免费在线观看日韩视频| 国产精品丝袜91| 精品国产乱码久久久久| 日韩专区视频| 欧亚精品中文字幕| 欧美国产高清| 91制片厂免费观看| 久久久久午夜电影| 日韩电影免费观看在| 波多野结衣中文字幕一区二区三区| 亚洲国产一区二区三区在线播放| 欧美日韩性生活视频| 免费高潮视频95在线观看网站| 久久国际精品| 国产免费a∨片在线观看不卡| 国产v综合ⅴ日韩v欧美大片| 精品久久久久人成| 成人午夜av电影| 亚洲欧美怡红院| 欧美色xxxx| 日韩欧美中文字幕在线播放| 久久99深爱久久99精品| 亚洲大全视频| 在线看片不卡| 久久精品男女| 国产精品专区免费| 妞干网在线播放| 99久久精品免费看| 外国成人在线视频| 日韩网站在线免费观看| 欧美日韩视频专区在线播放| 国产欧美视频一区二区| 日韩视频精品在线观看| 秋霞一区二区三区| 久久99国产综合精品女同| 一区二区三区四区不卡视频 | 亚洲精品在线免费看| 国产日韩专区在线| 亚洲欧美综合另类中字| 国产亚洲综合视频| 国产精品久久7| 国内精品亚洲| dy888亚洲精品一区二区三区| 国产尤物av一区二区三区| 成人黄色中文字幕| 制服丝袜国产精品| 亚洲免费综合| 99精品在线免费观看| 亚州av中文字幕在线免费观看| 国产日韩一区二区| 日韩精品福利网| 在线播放一区二区精品视频| 99久久久久久| 91精品免费视频| 亚洲一区二区三区视频在线播放| 狠狠色丁香九九婷婷综合五月| 国产高清精品一区二区三区| 国产精品对白刺激久久久| eeuss影院一区二区三区| 欧美成人xxx| 亚洲不卡在线观看| 97影院在线观看| 最近免费中文字幕视频2019| 午夜在线精品偷拍| 色av男人的天堂免费在线| 欧美精品激情在线| eeuss影院一区二区三区| yellow字幕网在线| 日产精品一线二线三线芒果| 欧美三级电影一区| 在线中文一区| 男人天堂网在线| 国产原创欧美精品| 一个色在线综合| 欧美日韩爱爱| 毛片手机在线观看| 97香蕉超级碰碰久久免费的优势| 91丨porny丨蝌蚪视频| 国产韩日精品| 日韩精品在线观看av| 日韩精品在线观| 国内精品伊人久久久久av影院| 激情影院在线| 久久精品2019中文字幕| 国产伦精品一区二区三区在线播放 | 亚洲视频中文字幕| **爰片久久毛片| 成人在线免费播放视频| 中文字幕日韩在线播放| av成人男女| 91精品啪aⅴ在线观看国产| 亚洲欧美日韩中文字幕一区二区三区| 一区二区三区视频在线看| 天堂综合网久久| 久草在线国产| 国产精品美女免费视频| 精品国产福利视频| 亚洲人成人一区二区三区| 18加网站在线| 久久精品视频在线播放| 成人av第一页| 色妞ww精品视频7777| 2019一级黄色毛片免费看网| 日韩**中文字幕毛片| 欧美日韩在线第一页| 日韩一级网站| 乱馆动漫1~6集在线观看| 日韩精品视频一区二区在线观看| xvideos国产精品| 亚洲日本在线视频观看| 91精品啪在线观看国产18 | 一本色道久久亚洲综合精品蜜桃| 欧美日韩高清区| 亚洲人成精品久久久久| 久久久久久影院| 超碰在线观看免费版| 一区二区三区四区免费观看| 亚洲精品日韩一| 清纯唯美日韩| 久草资源在线| 日韩一二区视频| 性色av一区二区三区| 欧美日韩亚洲精品内裤| 免费在线观看精品| 欧美少妇另类|