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

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

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

背景

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

  • 圖一

  • 圖二

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

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

 <HConfirmModal  
     title="測試標(biāo)題" 
     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:'測試標(biāo)題',
      modalType:'TimeConfirm',
      desc:'注意危險'
    })
    openModifyModal(true)
  }

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

開發(fā)前想法

最早的實操方案打算借助于antd中的modal組件,對modal組件重新進行封裝,但是發(fā)現(xiàn):當(dāng)我在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可以獲取到當(dāng)前組件的實例,既然可以獲取到當(dāng)前的實例,那么比必然可以操作實例上的方法。

然后,我們在組件實例化的時候觸發(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中如何引入外部的css文件

    在vue中如何引入外部的css文件

    這篇文章主要介紹了在vue中如何引入外部的css文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 10分鐘快速上手VueRouter4.x教程

    10分鐘快速上手VueRouter4.x教程

    Vue Router目前最新版本是4.X,本文主要主要介紹了10分鐘快速上手VueRouter4.x教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue2項目之swiper.js 的使用

    vue2項目之swiper.js 的使用

    這篇文章主要介紹了vue2項目之swiper.js 的使用,需要的朋友可以參考下
    2023-12-12
  • vue父組件向子組件(props)傳遞數(shù)據(jù)的方法

    vue父組件向子組件(props)傳遞數(shù)據(jù)的方法

    這篇文章主要介紹了vue父組件向子組件(props)傳遞數(shù)據(jù)的方法,文中給大家補充介紹了vue父子組件間傳值(props)的實現(xiàn)代碼,需要的朋友可以參考下
    2018-01-01
  • Vue3編程流暢技巧使用setup語法糖拒絕寫return

    Vue3編程流暢技巧使用setup語法糖拒絕寫return

    這篇文章主要為大家介紹了Vue3編程流暢技巧使用setup語法糖拒絕寫return的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • vue3+vite中使用import.meta.glob的操作代碼

    vue3+vite中使用import.meta.glob的操作代碼

    在vue2的時候,我們一般引入多個js或者其他文件,一般使用? require.context 來引入多個不同的文件,但是vite中是不支持 require的,他推出了一個功能用import.meta.glob來引入多個,單個的文件,下面通過本文介紹vue3+vite中使用import.meta.glob,需要的朋友可以參考下
    2022-11-11
  • vue.js指令v-model實現(xiàn)方法

    vue.js指令v-model實現(xiàn)方法

    這篇文章主要為大家詳細介紹了vue.js指令v-model實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • vue-admin-template配置快捷導(dǎo)航的代碼(標(biāo)簽導(dǎo)航欄)

    vue-admin-template配置快捷導(dǎo)航的代碼(標(biāo)簽導(dǎo)航欄)

    這篇文章主要介紹了vue-admin-template配置快捷導(dǎo)航的方法(標(biāo)簽導(dǎo)航欄),本文通過實例代碼給大家介紹的非常詳細,對大家學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 詳解vue3中渲染函數(shù)的非兼容變更

    詳解vue3中渲染函數(shù)的非兼容變更

    這篇文章主要介紹了詳解vue3中渲染函數(shù)的非兼容變更,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • vue-cli webpack2項目打包優(yōu)化分享

    vue-cli webpack2項目打包優(yōu)化分享

    下面小編就為大家分享一篇vue-cli webpack2項目打包優(yōu)化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02

最新評論

安庆市| 江永县| 涟源市| 韩城市| 浦县| 台北市| 安远县| 佛坪县| 车险| 集安市| 农安县| 淳安县| 卢氏县| 新蔡县| 巨野县| 漯河市| 沙河市| 鄂托克旗| 临洮县| 攀枝花市| 德令哈市| 永清县| 延庆县| 华宁县| 依兰县| 霍林郭勒市| 开江县| 阳朔县| 宿松县| 酒泉市| 洛扎县| 项城市| 黑山县| 米林县| 阜城县| 河北省| 安岳县| 文成县| 理塘县| 台中县| 武平县|