vue3结合hooks开发可以注册的二次确认弹框

 更新时间:2022年12月01日 08:57:01   作者:前端那些年  
这篇文章主要为大家介绍了vue3结合hooks开发可以注册的二次确认弹框,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

背景

上次开发了一个类似popConfirm的二次确认弹框,如下面两个图:

  • 图一

  • 图二

完成开发后,准备集成到项目中时忽然发现无法集成到公司内部的组件库中,因为公司的组件库表格的操作项按钮是通过传参的方式进行配置,无法直接使用popConfirm包裹操作按钮的方式进行Dom的书写。

所以又对二次弹框进行了一次简单的开发,采用modal的方式进行开发。好处是除了可以以之前的方式,直接在组件上传入props使用,如:

 <HConfirmModal  
     title="测试标题" 
     modalType="TextConfirm" 
     paperWork="hello-word" 
     :width="300" 
     v-model:visible="visible">
 </HConfirmModal>

也可以采用注册的方式,注册组件后,调用组件的api进行使用,如:

 <HConfirmModal  @register="register" @ok="testOK" ></HConfirmModal>
 const [register, { openConfirmModal: openModifyModal,setConfirmModalProps}] = useConfirmModal()
  function handleShow() {
    setConfirmModalProps({
      title:'测试标题',
      modalType:'TimeConfirm',
      desc:'注意危险'
    })
    openModifyModal(true)
  }

这样就可以比较方便的集成到现有的组件库中,也不需要改动现有组件库中的table相关的代码,相对来说效果也稍微好一些。

开发前想法

最早的实操方案打算借助于antd中的modal组件,对modal组件重新进行封装,但是发现:当我在modal组件中写入相应的dom结构后,如图:

  • 图一

  • 图二

modal组件中写入表单相关的dom后,需要我点击确认按钮时,对表单进行校验,这时候就需要能够直接获取Modal组件中的click事件。

那么,如何获取这个事件呢?

最开始的时候,也没想到很好的方法,后来想是否可以用ref来获取Modal的实例,然后调用这个实例上注册的事件呢?

也许可以,但是这样操作起来似乎有点舍近求远,毕竟除了表单校验的逻辑还有一个倒计时的罗需要进行判断,写起来似乎有些麻烦。

所以最终还是觉得借鉴Modal的样式,重新开发一个比较好,写起来比较舒服,效率也会高一点。

两种调用方式的实现思路

第一,使用props进行控制。这种组件实现起来比较简单,定义好组件需要的属性作为props,传递给组件,组件按照不同的属性进行渲染,点击时触发不同的emit事件即可。

其流程为:props和emit事件 ---> 渲染组件 ---> 触发emit事件

这种方式实现起来比较简单,但是场景稍微有些局限,如:组件的行为,如显示、隐藏必须在外部定义,需要外部书写相应的函数进行控制。

第二种方式,定义组件内部的方法,组件的行为通过组件本身的方法进行控制,同时将组件自身的方式通过hooks的方式暴露给外部。

其流程为:props和emit事件 ---> 组件定义自身需要的函数,同时将传入的props属性转化为内部属性---> 组件的行为根据自身的属性和方法进行控制---> 将组件本身的方法以hooks的形式暴露出来

这样一来,组件即可以以传统props的方式使用,也可以通过hooks的注册方法及组件本身的其他方法进行控制,使用的场景相对来说更广泛一些。

核心方法

传统的组件开发方式这里就不做过多的解释了,主要讲一下第二种方式的实现方式。

使用第二种方式开发组件的关键点有两处:

第一, 如何将外部传入的props转化为组件内部的属性 ?

第二,如何才能够获取到组件自身所定义的方法 ?

将外部传入的props转为组件内部属性其实很简单,我们只需要使用computed方式将转化一下即可,如:

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

这样我们就可以使用组件内部的属性getMergeProps对组件的dom进行渲染,实现不同的属性展示不同的内容。

那么,如何才能获取组件内部的方法呢?其实也很简单,这里需要用到一个vue提供的一个方法:getCurrentInstance

getCurrentInstance可以获取到当前组件的实例,既然可以获取到当前的实例,那么比必然可以操作实例上的方法。

然后,我们在组件实例化的时候触发一个注册函数register,将组件内部需要对外暴露的方法传给register方法,然后在对应的hooks中可以扩展实例的方法,这样我们就可以实现使用hooks的方式,注册、然后控制组件的各种行为。

这个触发的代码也很简单:

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

最后,我们在hooks函数中可以获取组件的实例,拿到组件实例对象后,我们就可以为所欲为了。

最后

文章贴的代码较少,主要是觉得技术上还是需要以理解实现思路为主,有了思路我们就可以写各式各样的代码去实现功能,单纯的贴代码似乎没什么太大的意义。

以上就是vue3结合hooks开发可以注册的二次确认弹框的详细内容,更多关于vue3 hooks注册确认弹框的资料请关注脚本之家其它相关文章!

相关文章

  • vue新建项目并配置标准路由过程解析

    vue新建项目并配置标准路由过程解析

    这篇文章主要介绍了vue新建项目并配置标准路由过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Vue Echarts实现图表的动态适配以及如何优化

    Vue Echarts实现图表的动态适配以及如何优化

    这篇文章主要介绍了Vue Echarts实现图表的动态适配以及如何优化,在实际的前端开发过程中,动态适配是一个非常重要的问题,在数据可视化的场景下,图表的动态适配尤为重要,需要的朋友可以参考下
    2023-05-05
  • vue实现公告消息横向无缝循环滚动

    vue实现公告消息横向无缝循环滚动

    这篇文章主要为大家详细介绍了vue实现公告消息横向无缝循环滚动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue.js表格组件开发的实例详解

    vue.js表格组件开发的实例详解

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统。在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,所以本文将从各方面对Vue.js的组件开发做一个深入介绍。有需要的朋友们可以参考借鉴。
    2016-10-10
  • 解决vue3使用element-ui的具体操作

    解决vue3使用element-ui的具体操作

    elmentui是一款为vue设计的桌面组件库,下面这篇文章主要给大家介绍了关于解决vue3使用element-ui的具体操作,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 详解element-ui中表单验证的三种方式

    详解element-ui中表单验证的三种方式

    这篇文章主要介绍了详解element-ui中表单验证的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • vue跳转页面并且实现参数传递接受示例

    vue跳转页面并且实现参数传递接受示例

    这篇文章主要为大家介绍了vue跳转页面并且实现参数传递接受示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • vue快速入门基础知识教程

    vue快速入门基础知识教程

    VUE是一套前端框架,免除了原生JavaScript中的DOM操作,简化书写。VUE基于MVVM(Model-View_ViewModel)思想,实现数据双向绑定。Vue的核心库只关注图层.响应式数据绑定和组件化开发是其两大特点。
    2023-01-01
  • element-ui select多选绑定回显值问题

    element-ui select多选绑定回显值问题

    这篇文章主要介绍了element-ui select多选绑定回显值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue.js 表单控件操作小结

    Vue.js 表单控件操作小结

    这篇文章给大家介绍了Vue.js 表单控件操作的相关知识,本文通过实例演示了input和textarea元素中使用v-model的方法,本文给大家介绍的非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2018-03-03

最新评论