欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3結(jié)合hooks開發(fā)可以注冊的二次確認彈框

 更新時間:2022年12月01日 08:57:01   作者:前端那些年  
這篇文章主要為大家介紹了vue3結(jié)合hooks開發(fā)可以注冊的二次確認彈框,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

背景

上次開發(fā)了一個類似popConfirm的二次確認彈框,如下面兩個圖:

  • 圖一

  • 圖二

完成開發(fā)后,準備集成到項目中時忽然發(fā)現(xiàn)無法集成到公司內(nèi)部的組件庫中,因為公司的組件庫表格的操作項按鈕是通過傳參的方式進行配置,無法直接使用popConfirm包裹操作按鈕的方式進行Dom的書寫。

所以又對二次彈框進行了一次簡單的開發(fā),采用modal的方式進行開發(fā)。好處是除了可以以之前的方式,直接在組件上傳入props使用,如:

 <HConfirmModal  
     title="測試標題" 
     modalType="TextConfirm" 
     paperWork="hello-word" 
     :width="300" 
     v-model:visible="visible">
 </HConfirmModal>

也可以采用注冊的方式,注冊組件后,調(diào)用組件的api進行使用,如:

 <HConfirmModal  @register="register" @ok="testOK" ></HConfirmModal>
 const [register, { openConfirmModal: openModifyModal,setConfirmModalProps}] = useConfirmModal()
  function handleShow() {
    setConfirmModalProps({
      title:'測試標題',
      modalType:'TimeConfirm',
      desc:'注意危險'
    })
    openModifyModal(true)
  }

這樣就可以比較方便的集成到現(xiàn)有的組件庫中,也不需要改動現(xiàn)有組件庫中的table相關(guān)的代碼,相對來說效果也稍微好一些。

開發(fā)前想法

最早的實操方案打算借助于antd中的modal組件,對modal組件重新進行封裝,但是發(fā)現(xiàn):當我在modal組件中寫入相應(yīng)的dom結(jié)構(gòu)后,如圖:

  • 圖一

  • 圖二

modal組件中寫入表單相關(guān)的dom后,需要我點擊確認按鈕時,對表單進行校驗,這時候就需要能夠直接獲取Modal組件中的click事件。

那么,如何獲取這個事件呢?

最開始的時候,也沒想到很好的方法,后來想是否可以用ref來獲取Modal的實例,然后調(diào)用這個實例上注冊的事件呢?

也許可以,但是這樣操作起來似乎有點舍近求遠,畢竟除了表單校驗的邏輯還有一個倒計時的羅需要進行判斷,寫起來似乎有些麻煩。

所以最終還是覺得借鑒Modal的樣式,重新開發(fā)一個比較好,寫起來比較舒服,效率也會高一點。

兩種調(diào)用方式的實現(xiàn)思路

第一,使用props進行控制。這種組件實現(xiàn)起來比較簡單,定義好組件需要的屬性作為props,傳遞給組件,組件按照不同的屬性進行渲染,點擊時觸發(fā)不同的emit事件即可。

其流程為:props和emit事件 ---> 渲染組件 ---> 觸發(fā)emit事件。

這種方式實現(xiàn)起來比較簡單,但是場景稍微有些局限,如:組件的行為,如顯示、隱藏必須在外部定義,需要外部書寫相應(yīng)的函數(shù)進行控制。

第二種方式,定義組件內(nèi)部的方法,組件的行為通過組件本身的方法進行控制,同時將組件自身的方式通過hooks的方式暴露給外部。

其流程為:props和emit事件 ---> 組件定義自身需要的函數(shù),同時將傳入的props屬性轉(zhuǎn)化為內(nèi)部屬性---> 組件的行為根據(jù)自身的屬性和方法進行控制---> 將組件本身的方法以hooks的形式暴露出來

這樣一來,組件即可以以傳統(tǒng)props的方式使用,也可以通過hooks的注冊方法及組件本身的其他方法進行控制,使用的場景相對來說更廣泛一些。

核心方法

傳統(tǒng)的組件開發(fā)方式這里就不做過多的解釋了,主要講一下第二種方式的實現(xiàn)方式。

使用第二種方式開發(fā)組件的關(guān)鍵點有兩處:

第一, 如何將外部傳入的props轉(zhuǎn)化為組件內(nèi)部的屬性 ?

第二,如何才能夠獲取到組件自身所定義的方法 ?

將外部傳入的props轉(zhuǎn)為組件內(nèi)部屬性其實很簡單,我們只需要使用computed方式將轉(zhuǎn)化一下即可,如:

  const getMergeProps = computed((): Recordable => {
      return {
        ...props,
        ...(unref(propsRef) as any)
      }
    })

這樣我們就可以使用組件內(nèi)部的屬性getMergeProps對組件的dom進行渲染,實現(xiàn)不同的屬性展示不同的內(nèi)容。

那么,如何才能獲取組件內(nèi)部的方法呢?其實也很簡單,這里需要用到一個vue提供的一個方法:getCurrentInstance。

getCurrentInstance可以獲取到當前組件的實例,既然可以獲取到當前的實例,那么比必然可以操作實例上的方法。

然后,我們在組件實例化的時候觸發(fā)一個注冊函數(shù)register,將組件內(nèi)部需要對外暴露的方法傳給register方法,然后在對應(yīng)的hooks中可以擴展實例的方法,這樣我們就可以實現(xiàn)使用hooks的方式,注冊、然后控制組件的各種行為。

這個觸發(fā)的代碼也很簡單:

 const instance = getCurrentInstance()
    if (instance) {
      emit('register', modalMethods, instance.uid)
    }

最后,我們在hooks函數(shù)中可以獲取組件的實例,拿到組件實例對象后,我們就可以為所欲為了。

最后

文章貼的代碼較少,主要是覺得技術(shù)上還是需要以理解實現(xiàn)思路為主,有了思路我們就可以寫各式各樣的代碼去實現(xiàn)功能,單純的貼代碼似乎沒什么太大的意義。

以上就是vue3結(jié)合hooks開發(fā)可以注冊的二次確認彈框的詳細內(nèi)容,更多關(guān)于vue3 hooks注冊確認彈框的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue 解決數(shù)組賦值無法渲染在頁面的問題

    vue 解決數(shù)組賦值無法渲染在頁面的問題

    今天小編就為大家分享一篇vue 解決數(shù)組賦值無法渲染在頁面的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • elementUI動態(tài)嵌套el-form表單校驗舉例詳解

    elementUI動態(tài)嵌套el-form表單校驗舉例詳解

    最近工作遇到個需求,表單可以進行增加刪除操作,需要進行表單校驗,這篇文章主要給大家介紹了關(guān)于elementUI動態(tài)嵌套el-form表單校驗的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • 使用iView Upload 組件實現(xiàn)手動上傳圖片的示例代碼

    使用iView Upload 組件實現(xiàn)手動上傳圖片的示例代碼

    這篇文章主要介紹了使用iView Upload 組件實現(xiàn)手動上傳圖片的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • vue子組件獲取到它父組件數(shù)據(jù)的4種方法

    vue子組件獲取到它父組件數(shù)據(jù)的4種方法

    這篇文章主要給大家介紹了關(guān)于vue子組件獲取到它父組件數(shù)據(jù)的4種方法,對于vue來說組件之間的消息傳遞是非常重要的,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • vue3前端實現(xiàn)全屏顯示及元素垂直填滿頁面效果

    vue3前端實現(xiàn)全屏顯示及元素垂直填滿頁面效果

    這篇文章主要給大家介紹了關(guān)于vue3前端實現(xiàn)全屏顯示及元素垂直填滿頁面效果的相關(guān)資料,文中還給大家介紹了vue3實現(xiàn)某一個元素全屏之后就黑屏了的解決辦法,需要的朋友可以參考下
    2024-02-02
  • vue如何使用process.env搭建自定義運行環(huán)境

    vue如何使用process.env搭建自定義運行環(huán)境

    這篇文章主要介紹了vue如何使用process.env搭建自定義運行環(huán)境,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue修改mint-ui默認樣式的方法

    Vue修改mint-ui默認樣式的方法

    下面小編就為大家分享一篇Vue修改mint-ui默認樣式的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • 詳解Vue組件如何正確引用和使用外部方法

    詳解Vue組件如何正確引用和使用外部方法

    在開發(fā)Vue應(yīng)用時,我們經(jīng)常需要在多個組件中復(fù)用一些通用的函數(shù)或方法,這些函數(shù)可能是我們自己編寫的工具函數(shù),也可能是從第三方庫中導(dǎo)入的,下面我們就來看看如何正確引用和使用外部方法吧
    2024-01-01
  • Vue3?中?watch?與?watchEffect?區(qū)別及用法小結(jié)

    Vue3?中?watch?與?watchEffect?區(qū)別及用法小結(jié)

    這篇文章主要介紹了Vue3?中?watch?與?watchEffect?有什么區(qū)別?watch中需要指明監(jiān)視的屬性,也需要指明監(jiān)視的回調(diào),而watchEffect中不需要指明監(jiān)視的屬性,只需要指明監(jiān)視的回調(diào),回調(diào)函數(shù)中用到哪個屬性,就監(jiān)視哪個屬性,本文給大家詳細介紹,需要的朋友參考下
    2022-06-06
  • webstorm和.vue中es6語法報錯的解決方法

    webstorm和.vue中es6語法報錯的解決方法

    本篇文章主要介紹了webstorm和.vue中es6語法報錯的解決方法,小編總結(jié)了webstorm和.vue中出現(xiàn)的es6語法報錯,避免大家采坑,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論