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

vue3中使用ref和emit來(lái)減少props的使用示例詳解

 更新時(shí)間:2022年06月21日 11:24:21   作者:@我不認(rèn)識(shí)你  
現(xiàn)在在開(kāi)發(fā)vue3項(xiàng)目的過(guò)程中,我們開(kāi)發(fā)小組漸漸的減少props的使用,轉(zhuǎn)而用ref 和 emit 來(lái)代替,這篇文章主要介紹了vue3中使用ref和emit來(lái)減少props的使用,需要的朋友可以參考下

前言

在之前開(kāi)發(fā)vue2項(xiàng)目中,props 屬性在組件中經(jīng)常使用來(lái)進(jìn)行組件通信。現(xiàn)在在開(kāi)發(fā)vue3項(xiàng)目的過(guò)程中,我們開(kāi)發(fā)小組漸漸的減少props的使用,轉(zhuǎn)而用refemit 來(lái)代替。缺點(diǎn)不太清楚,但是好處還是挺多的。下面結(jié)合實(shí)際的開(kāi)發(fā)常見(jiàn)來(lái)舉例。

示例

示例1

以彈窗組件來(lái)說(shuō),之前vue2時(shí)是通過(guò)props屬性來(lái)控制彈窗的打開(kāi),比如下面這個(gè)新增彈窗退貨的彈窗組件(大多數(shù)清空下,新增和修改一般是一個(gè)組件)

<add-return-goods :visible.sync="openEdit" :detail="rowData" :title="editTitle" @addSuccess="getTableInfo"></add-return-goods>
  • visible 用來(lái)控制彈窗的顯示隱藏
  • detail 當(dāng)點(diǎn)擊修改時(shí),用來(lái)向組件傳參
  • title 彈窗的標(biāo)題,同時(shí)也可以用來(lái)區(qū)分是新增彈窗還是,修改彈窗

第一個(gè)問(wèn)題就是屬性多了就不容易管理,而且需要定義許多變量來(lái)作為參數(shù)。第二個(gè)問(wèn)題就拿新增和修改來(lái)說(shuō),組件內(nèi)部要通過(guò)監(jiān)聽(tīng)title來(lái)判斷當(dāng)前是新增還是修改,讓后來(lái)執(zhí)行不同的操作。

ref的優(yōu)點(diǎn),在vue3,setup語(yǔ)法糖中,vue提供了defineExpose來(lái)向外暴露屬性和方法。針對(duì)上面的問(wèn)題,只需要向外暴露一個(gè)新增方法和一個(gè)修改方法,修改和修改時(shí)只需要使用不同的方法即可。這樣就不再需要定義多余的變量,也不需要進(jìn)行監(jiān)聽(tīng)

示例2

關(guān)于公共組件的開(kāi)發(fā),比如有這樣一個(gè)彈窗組件

在這里插入圖片描述

如果使用props來(lái)進(jìn)行封裝的話(huà),基本需要下面這些屬性:

  • url:保存時(shí),需要請(qǐng)求的接口
  • params:參數(shù)(對(duì)象),保存時(shí)需要向后臺(tái)傳遞的參數(shù)
  • prop:屬性,因?yàn)闋顟B(tài)是可以修改的,所有需要一個(gè)屬性來(lái)進(jìn)行標(biāo)識(shí),當(dāng)狀態(tài)改變后同步修改 params里面屬性的值

下面是借助refemit進(jìn)行的封裝

<template>
    <el-dialog v-model="status.dialogVisible" title="批量修改狀態(tài)" width="400px" :close-on-click-modal="false" draggable
        @close="closeDialog">
        <el-form :model="status.form" label-position="top">
            <el-form-item label="狀態(tài)選擇" prose="editStatus">
                <el-radio-group v-model="status.form.editStatus">
                    <el-radio :label="1">使用</el-radio>
                    <el-radio :label="0">停用</el-radio>
                </el-radio-group>
            </el-form-item>
        </el-form>
        <template #footer>
            <span>
                <el-button type="primary" :loading="status.saveLoading" @click="save">保存</el-button>
            </span>
        </template>
    </el-dialog>
</template>
<script lang="ts">
export default {
    name: 'batch-edit-state',
}
</script>

<script setup lang="ts">
import { reactive, defineExpose, defineEmits } from 'vue'
import { ElMessage } from 'element-plus'
import { BtUseAppStore } from 'beeboat-ui/es/core/store'
const appStore = BtUseAppStore()
const http = appStore.getHttp()

const emit = defineEmits(['save', 'saveSuccess'])

let status = reactive({
    form: {
        //修改狀態(tài)
        editStatus: 1,
    },
    dialogVisible: false,
    //保存加載
    saveLoading: false,
})

//打開(kāi)彈窗
let open = (value: number) => {
    if (![0, 1].includes(value)) {
        ElMessage.warning('狀態(tài)彈窗缺少入?yún)⒒騾?shù)值錯(cuò)誤!')
        return false
    }
    status.dialogVisible = true
    status.form.editStatus = value
}

//關(guān)閉彈窗
let closeDialog = () => {
    status.dialogVisible = false
    status.form.editStatus = 1
    status.saveLoading = false
}

//保存
let save = () => {
    status.saveLoading = true
    emit('save', status.form.editStatus, saveState)
}

//根據(jù)入?yún)ⅲ{(diào)用保存接口
let saveState = (url: string, params: any) => {
    http.post(url, params)
        .then(() => {
            ElMessage.success('修改成功!')
            closeDialog()
            emit('saveSuccess')
        })
}

defineExpose({
    open,
})
</script>


<batch-edit-state ref="stateRef" @save="editStateSave" />
let editStateSave = (value: number, callback) => {
    callback(url,params)
}
  • 向外暴露一個(gè)open方法用來(lái)打開(kāi)彈窗,通過(guò)open 方法的入?yún)?lái)進(jìn)行修改的初始化
  • 當(dāng)點(diǎn)擊保存時(shí),向父組件傳遞當(dāng)前的狀態(tài),以及一個(gè)保存的回調(diào)函數(shù)。

到此這篇關(guān)于vue3中使用ref和emit來(lái)減少props的使用的文章就介紹到這了,更多相關(guān)vue內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-cli3.0如何使用prerender-spa-plugin插件預(yù)渲染

    vue-cli3.0如何使用prerender-spa-plugin插件預(yù)渲染

    這篇文章主要介紹了vue-cli3.0如何使用prerender-spa-plugin插件預(yù)渲染,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue+element?tree懶加載更新數(shù)據(jù)的示例代碼

    vue+element?tree懶加載更新數(shù)據(jù)的示例代碼

    這篇文章主要介紹了vue+element?tree懶加載更新數(shù)據(jù),文中給大家補(bǔ)充介紹了Vue Element Ui 樹(shù)形表懶加載新增、修改、刪除等操作后局部數(shù)據(jù)更新的詳細(xì)代碼,感興趣的朋友跟隨小編一起看看吧
    2022-09-09
  • 一文搞定vue3中的函數(shù)式彈窗

    一文搞定vue3中的函數(shù)式彈窗

    函數(shù)式彈窗是一種使用函數(shù)來(lái)創(chuàng)建彈窗的技術(shù),它可以簡(jiǎn)化彈窗的使用,只需要在需要彈窗的地方調(diào)用函數(shù)就可以了,下面我們就來(lái)看看vue3中函數(shù)式彈窗的具體應(yīng)用吧
    2024-01-01
  • vue中的封裝常用工具類(lèi)

    vue中的封裝常用工具類(lèi)

    這篇文章主要介紹了vue中的封裝常用工具類(lèi),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue cli3 庫(kù)模式搭建組件庫(kù)并發(fā)布到 npm的流程

    Vue cli3 庫(kù)模式搭建組件庫(kù)并發(fā)布到 npm的流程

    這篇文章主要介紹了Vue cli3 庫(kù)模式搭建組件庫(kù)并發(fā)布到 npm,以下一個(gè)簡(jiǎn)單的顏色選擇器插件 vColorPicker 講述從開(kāi)發(fā)到上線到npm的流程,需要的朋友可以參考下
    2018-10-10
  • vue自定義指令directive的使用方法

    vue自定義指令directive的使用方法

    這篇文章主要介紹了vue自定義指令directive的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • element step組件在另一側(cè)加時(shí)間軸顯示

    element step組件在另一側(cè)加時(shí)間軸顯示

    本文主要介紹了element step組件在另一側(cè)加時(shí)間軸顯示,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • vue3 setup語(yǔ)法糖之父子組件之間的傳值方法

    vue3 setup語(yǔ)法糖之父子組件之間的傳值方法

    父組件向子組件傳值的時(shí)候,子組件是通過(guò)props來(lái)接收的,然后以變量的形式將props傳遞到setup語(yǔ)法糖果中使用,本文給大家介紹vue3 setup語(yǔ)法糖之父子組件之間的傳值,感興趣的朋友一起看看吧
    2023-12-12
  • 用vue實(shí)現(xiàn)注冊(cè)頁(yè)效果?vue實(shí)現(xiàn)短信驗(yàn)證碼登錄

    用vue實(shí)現(xiàn)注冊(cè)頁(yè)效果?vue實(shí)現(xiàn)短信驗(yàn)證碼登錄

    這篇文章主要為大家詳細(xì)介紹了用vue實(shí)現(xiàn)注冊(cè)頁(yè),短信驗(yàn)證碼登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Vue Cli項(xiàng)目重構(gòu)為Vite的方法步驟

    Vue Cli項(xiàng)目重構(gòu)為Vite的方法步驟

    本文主要介紹了Vue Cli項(xiàng)目重構(gòu)為Vite的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論

铁岭县| 洛阳市| 永吉县| 竹溪县| 正安县| 高雄市| 内江市| 胶南市| 龙南县| 门头沟区| 台前县| 富裕县| 清水河县| 嫩江县| 山阳县| 尼玛县| 晴隆县| 黄石市| 阿勒泰市| 滨州市| 元朗区| 三明市| 中卫市| 夏邑县| 博客| 红安县| 宝鸡市| 乌兰察布市| 高雄市| 安达市| 南康市| 乐至县| 清徐县| 无为县| 大冶市| 绥阳县| 汉中市| 新疆| 商城县| 封丘县| 炎陵县|