如何在vue中更优雅的封装第三方组件详解

 更新时间:2022年05月01日 09:37:31   作者:灵扁扁  
在封装第三方组件中,经常会遇到一个问题,下面这篇文章主要给大家介绍了关于如何在vue中更优雅的封装第三方组件的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

一、需求场景描述

实际开发的时候,为了减少重复造轮子,提高工作效率,节省开发时间成本, 免不了会使用ui组件库,比如在web前端很受欢迎的element-ui。 但有的时候,我们需要在原组件的基础上做些改造,比如一个image组件, 我们需要统一在图片加载失败的时候展示的特定图,每次使用组件都加一遍, 麻烦耗时,关键是维护成本高,当需要更新这个加载出错的图片时, 得再次一个个去找到使用该组件的地方修改。

再例如自定义分页组件也很常见,组件的样式,默认支持的每页数目, 封装之后再用,在可维护性和开发效率上都很有好处。

然而也不至于从0开始写一个分页组件,在原有基础上封装就好, 那么如何快速优雅的封装一个第三方组件库的组件呢? v-bind="attrs"和v−on="listeners" ="$listeners",会给我们带来惊喜。 它们可以使得封装后的组件, “继承”原组件的几乎所有 v-bind 属性和 v-on 事件,且用法和作用与在原组件一样。

封装el-image 为 custom-image 组件,所有使用custom-image 展示图片的地方, 图片加载过程中都会统一展示“加载中...”的提示,且当加载出错时,会展示统一的默认图。 下面是一个 custom-image 组件加载过程以及加载出错的效果。

二、关键技术点介绍

1.v-bind="$attrs"

v-bind="$attrs"的妙用是在创建更高级别的组件,在封装第三方组件时,

可以自动将在父作用域中使用的v-bind的属性自动绑定,

并向下传入被封装的使用了v-bind="$attrs"的组件。

一段摘自 vue 官网的介绍

包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute

绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,

这里会包含所有父作用域的绑定 (class 和 style 除外),

并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。

例如我们封装的custom-Image组件,使用了v-bind="$attrs"之后, 我们在custom-Image组件中,也拥有了el-image的几乎所有属性, 而且其作用效果和用法,是和我们使用el-image是一样的, 也就说我们可以看着el-image的文章去使用custom-Image。

2.v-on="$listeners"

v-on="listeners"的作用和用法与v−bind="listeners"的作用和用法与v-bind="listeners"的作用和用法与v−bind="attrs"类似, 它可以将父作用域中的使用v-on的时间监听器向下传入到使用了v-on="listeners"组件中,和v−bind="listeners"组件中, 和v-bind="listeners"组件中,和v−bind="attrs"的功效类似,只不过一个属性一个是事件。还是custom-Image组件为例, 这时候custom-Image组件就拥有了el-image组件的几乎所有事件。 而且其作用效果和用法,是和我们使用el-image是一样的。

包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。

它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。

一段摘自 vue 官网的介绍

三、封装el-image的代码示例

使用custom-Image组件的示例

<custom-Image fit="fill" class="icon-img" :src="picPreview(expert)"></custom-Image>

封装el-image为custom-Image组件的示例

<template>
  <div id="CustomImage">
    <el-image v-bind="$attrs" v-on="$listeners">
      <div slot="error" class="image-slot">
        <img :src="require('image-f/icon-empty-img.png')" alt="图片加载失败.png"/>
      </div>
      <div slot="placeholder" class="placeholder-slot">加载中...</div>
    </el-image>
  </div>
</template>

<script>
export default {
  name: 'CustomImage'
}
</script>

<style scoped lang="scss">
  #CustomImage {
  .image-slot {
    text-align: center;
  }

  .placeholder-slot {
    text-align: center;
  }
}
</style>

总结

到此这篇关于如何在vue中更优雅的封装第三方组件的文章就介绍到这了,更多相关vue封装第三方组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue 如何处理防止按钮重复点击问题

    vue 如何处理防止按钮重复点击问题

    这篇文章主要介绍了vue 如何处理防止按钮重复点击问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 解决el-date-picker日期选择控件少一天的问题

    解决el-date-picker日期选择控件少一天的问题

    这篇文章主要介绍了解决el-date-picker日期选择控件少一天的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 部署vue+Springboot前后端分离项目的步骤实现

    部署vue+Springboot前后端分离项目的步骤实现

    这篇文章主要介绍了部署vue+Springboot前后端分离项目的步骤实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 基于脚手架创建Vue项目实现步骤详解

    基于脚手架创建Vue项目实现步骤详解

    这篇文章主要介绍了基于脚手架创建Vue项目实现步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 手写 Vue3 响应式系统(核心就一个数据结构)

    手写 Vue3 响应式系统(核心就一个数据结构)

    这篇文章主要介绍了手写 Vue3 响应式系统(核心就一个数据结构),响应式就是被观察的数据变化的时候做一系列联动处理。就像一个社会热点事件,当它有消息更新的时候,各方媒体都会跟进做相关报道。这里社会热点事件就是被观察的目标
    2022-06-06
  • vue移动端实现左滑编辑与删除的全过程

    vue移动端实现左滑编辑与删除的全过程

    vue.js是现在流行的js框架之一,vue 是一套用于构建用户界面的渐进式javascript框架,这篇文章主要给大家介绍了关于vue移动端实现左滑编辑与删除的相关资料,需要的朋友可以参考下
    2021-05-05
  • vue 实现小程序或商品秒杀倒计时

    vue 实现小程序或商品秒杀倒计时

    这篇文章主要介绍了vue 实现倒计时秒杀的组件,紧接着通过实例代码给大家介绍小程序或者vue商品秒杀倒计时功能,需要的朋友可以参考下
    2019-04-04
  • vue3的ref,computed,reactive和toRefs你都了解吗

    vue3的ref,computed,reactive和toRefs你都了解吗

    这篇文章主要为大家详细介绍了vue3的ref,computed,reactive和toRefs,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • vue3 element plus按需引入最优雅的用法实例

    vue3 element plus按需引入最优雅的用法实例

    这篇文章主要给大家介绍了关于vue3 element plus按需引入最优雅的用法,以及关于Element-plus按需引入的一些坑,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • VUE中的打包删除文件、图片的HASH码

    VUE中的打包删除文件、图片的HASH码

    这篇文章主要介绍了VUE中的打包删除文件、图片的HASH码,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论