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

vue3+vite+ts父子組件之間的傳值

 更新時(shí)間:2023年12月25日 14:35:37   作者:demo11111111  
隨著vue2的落幕,vue3越來(lái)成熟,有必要更新一下vue3的父子組件之間的傳值方式,這里介紹下vue3+vite+ts父子組件之間的傳值方式實(shí)例詳解,感興趣的朋友一起看看吧

前言

提示:這里僅描述<script lang="ts" setup>中的寫(xiě)法,另外一種寫(xiě)法的話,基本類似,這里不做展示了

隨著vue2的落幕,vue3越來(lái)成熟,有必要更新一下vue3的父子組件之間的傳值方式,和vue2的大差不差,都是一個(gè)道理,只不過(guò)寫(xiě)法上出現(xiàn)了差異,vue3+vite+ts安裝這里就不寫(xiě)了,由于文章中使用了element-plus的dialog組件作為子組件的內(nèi)容,所以前提工作是先安裝一下element-plus

一、父組件向子組件傳值

代碼如下(父組件示例):

<script setup lang="ts">
import systemDialog from '../../components/systemDialog.vue'
import { reactive, ref } from "vue";
const perInfo = reactive([
    {
        name: '張三',
        age: 20
    },
    {
        name: '李四',
        age: 25
    },
])
// vue2中的ref,vue3中也一樣是使用ref,只不過(guò)要定義一下這個(gè)變量
const systemDialogref = ref()
// 點(diǎn)擊doShow這個(gè)方法,使用ref的方式將子組件的彈框調(diào)用起來(lái),并且傳值過(guò)去,
const doShow = () => {
    let str = '這是ref傳過(guò)去的值'
    systemDialogref.value.showDialog(str)
}
</script>
<template>
    <div>
        <el-button text @click="doShow">click to open the Dialog</el-button>
        <systemDialog ref="systemDialogref" :perInfo="perInfo" msg="這是一段文本" />
    </div>
</template>
<style scoped>
</style>

代碼如下(子組件示例):

<script lang="ts" setup>
import { ref } from "vue";
import { ElMessageBox } from "element-plus";
// defineProps可以傳遞多個(gè)任意類型的值,類似vue2中的props
defineProps<{ perInfo: Array<any>; msg: string }>();
const dialogVisible = ref(false);
const handleClose = (done: () => void) => {
    ElMessageBox.confirm("Are you sure to close this dialog?")
        .then(() => {
            done();
        })
        .catch(() => {
            // catch error
        });
};
const testData = ref();
const showDialog = (val: any) => {
    testData.value = val;
    dialogVisible.value = true;
};
// 父組件使用ref調(diào)用showDialog方法,用到defineExpose將showDialog拋出去,直接用,不需要引入
defineExpose({
    showDialog
});
</script>
<template>
    <div>
        <el-dialog v-model="dialogVisible" title="Tips" width="30%" :before-close="handleClose">
            <div>下面的v-for循環(huán)就是父組件傳過(guò)來(lái)的值</div>
            <div v-for="(item, index) in perInfo" :key="index">
                名字: {{ item.name }}
                年齡: {{ item.age }}
            </div>
            <div>下面是通過(guò)ref父組件傳給子組件的值</div>
            <div>{{ testData }}</div>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="dialogVisible = false">Cancel</el-button>
                    <el-button type="primary" @click="dialogVisible = false">Confirm</el-button>
                </span>
            </template>
        </el-dialog>
    </div>
</template>
<style scoped>
.dialog-footer button:first-child {
    margin-right: 10px;
}
</style>

注意:父組件代碼中的perInfo和msg都是傳給子組件的值,由于子組件是一個(gè)彈框,要用到ref的方式打開(kāi)子組件的彈框

二、子組件向父組件傳值

代碼如下(子組件示例):

<script lang="ts" setup>
import { ref } from "vue";
import { ElMessageBox } from "element-plus";
// defineEmits中可以寫(xiě)多個(gè)方法
const emit = defineEmits(["send-data"]);
const dialogVisible = ref(false);
const handleClose = (done: () => void) => {
    ElMessageBox.confirm("Are you sure to close this dialog?")
        .then(() => {
            done();
        })
        .catch(() => {
            // catch error
        });
};
const showDialog = () => {
    dialogVisible.value = true;
};
// 父組件使用ref調(diào)用showDialog方法,用到defineExpose將showDialog拋出去,直接用,不需要引入
defineExpose({
    showDialog
});
// 觸發(fā)事件將子組件的值傳遞給父組件,send-data要在父組件中接收
const change = () => {
    emit("send-data", "這是子組件傳遞的一個(gè)值");
};
</script>
<template>
    <div>
        <el-dialog v-model="dialogVisible" title="Tips" width="30%" :before-close="handleClose">
            <el-button type="danger" plain @click="change">寫(xiě)一個(gè)按鈕觸發(fā)將值傳給父組件</el-button>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="dialogVisible = false">Cancel</el-button>
                    <el-button type="primary" @click="dialogVisible = false">Confirm</el-button>
                </span>
            </template>
        </el-dialog>
    </div>
</template>
<style scoped>
.dialog-footer button:first-child {
    margin-right: 10px;
}
</style>

代碼如下(父組件示例):

<script setup lang="ts">
import systemDialog from '../../components/systemDialog.vue'
import { ref } from "vue";
// vue2中的ref,vue3中也一樣是使用ref,只不過(guò)要定義一下這個(gè)變量
const systemDialogref = ref()
// 點(diǎn)擊doShow這個(gè)方法,使用ref的方式將子組件的彈框調(diào)用起來(lái)
const doShow = () => {
    systemDialogref.value.showDialog()
}
const sendData = ref(null)
const handleReceivedData = (res: any) => {
    console.log(res);
    sendData.value = res
}
</script>
<template>
    <div>
        <el-button text @click="doShow">click to open the Dialog</el-button>
        {{ sendData }}
        <systemDialog ref="systemDialogref" @send-data="handleReceivedData" />
    </div>
</template>
<style scoped>
</style>

子組件向父組件傳值,和vue2的很相似,邏輯也一樣,也是用到emit,只不過(guò)emit寫(xiě)法不一樣

三、非父子組件傳值,也就是任意兩個(gè)組件的傳值,和vue2基本相似,這里就不描述了,vue3里面建議大家使用pinia來(lái)進(jìn)行傳值。 

到此這篇關(guān)于vue3+vite+ts父子組件之間的傳值的文章就介紹到這了,更多相關(guān)vue3+vite+ts父子傳值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 手寫(xiě)可拖動(dòng)穿梭框組件CustormTransfer vue實(shí)現(xiàn)示例

    手寫(xiě)可拖動(dòng)穿梭框組件CustormTransfer vue實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了手寫(xiě)可拖動(dòng)穿梭框組件CustormTransfer vue實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Vue.js實(shí)戰(zhàn)之利用vue-router實(shí)現(xiàn)跳轉(zhuǎn)頁(yè)面

    Vue.js實(shí)戰(zhàn)之利用vue-router實(shí)現(xiàn)跳轉(zhuǎn)頁(yè)面

    對(duì)于單頁(yè)應(yīng)用,官方提供了vue-router進(jìn)行路由跳轉(zhuǎn)的處理,這篇文章主要給大家介紹了Vue.js實(shí)戰(zhàn)之利用vue-router實(shí)現(xiàn)跳轉(zhuǎn)頁(yè)面的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-04-04
  • Babel自動(dòng)生成Attribute文檔實(shí)現(xiàn)詳解

    Babel自動(dòng)生成Attribute文檔實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Babel自動(dòng)生成Attribute文檔實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 解決antd Form 表單校驗(yàn)方法無(wú)響應(yīng)的問(wèn)題

    解決antd Form 表單校驗(yàn)方法無(wú)響應(yīng)的問(wèn)題

    這篇文章主要介紹了解決antd Form 表單校驗(yàn)方法無(wú)響應(yīng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Vue獲取圖片MD5的方法詳解

    Vue獲取圖片MD5的方法詳解

    計(jì)算圖片的MD5可以將其作為圖片的唯一標(biāo)識(shí),從而優(yōu)化對(duì)圖片的存儲(chǔ)和檢索效率,本文主要介紹了Vue獲取圖片MD5的常用方法,感興趣的可以了解下
    2024-12-12
  • Vue中Axios從遠(yuǎn)程/后臺(tái)讀取數(shù)據(jù)

    Vue中Axios從遠(yuǎn)程/后臺(tái)讀取數(shù)據(jù)

    今天小編就為大家分享一篇關(guān)于Vue中Axios從遠(yuǎn)程/后臺(tái)讀取數(shù)據(jù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Vue中如何獲取json文件中的數(shù)據(jù)

    Vue中如何獲取json文件中的數(shù)據(jù)

    訪問(wèn)百度音樂(lè)API需要傳遞音樂(lè)類型參數(shù),而這些參數(shù)是存在musictype.json中,現(xiàn)在在組件listcate.vue需要獲取json數(shù)據(jù),如何實(shí)現(xiàn)呢,下面小編給大家?guī)?lái)了Vue中如何獲取json文件中的數(shù)據(jù),感興趣的朋友一起看看吧
    2022-09-09
  • vue 修改vant自帶的樣式過(guò)程

    vue 修改vant自帶的樣式過(guò)程

    這篇文章主要介紹了vue 修改vant自帶的樣式過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue 解決兄弟組件、跨組件深層次的通信操作

    vue 解決兄弟組件、跨組件深層次的通信操作

    這篇文章主要介紹了vue 解決兄弟組件、跨組件深層次的通信操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Vue封裝axios的示例講解

    Vue封裝axios的示例講解

    這篇文章主要介紹了vue3項(xiàng)目中封裝axios的示例代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

黄平县| 香港| 嘉义市| 台南县| 章丘市| 克拉玛依市| 邵阳县| 措勤县| 大同县| 兴安盟| 固阳县| 江华| 且末县| 道孚县| 西平县| 广德县| 岱山县| 新干县| 城市| 铁力市| 嘉义县| 韩城市| 阳西县| 蛟河市| 新竹市| 乡城县| 敦化市| 沙田区| 大余县| 天镇县| 肥城市| 夏河县| 广州市| 平安县| 桦南县| 资中县| 富锦市| 华容县| 榆林市| 扎鲁特旗| 清新县|