在 Vue 中更优雅的封装第三方组件

VSole2022-08-09 09:58:24

一、需求场景描述

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

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

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

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

二、关键技术点介绍

1.v-bind=$attrs

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

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

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

一段摘自vue官网的介绍

包含了父作用域中不作为prop被识别 (且获取) 的attribute, 绑定 (classstyle除外)。当一个组件没有声明任何prop时, 这里会包含所有父作用域的绑定 (classstyle除外), 并且可以通过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>
bind前端组件
本作品采用《CC 协议》,转载必须注明作者和本文链接
on=listeners=$listeners,会给我们带来惊喜。下面是一个custom-image组件加载过程以及加载出错的效果。一段摘自vue官网的介绍包含了父作用域中不作为prop被识别 (且获取) 的attribute, 绑定 。bind=listeners的作用和用法与v-bind=listeners的作用和用法与v?bind=attrs的功效类似,只不过一个属性一个是事件。
Java命名和目录接口是Java编程语言中接口的名称( JNDI )。它是一个API(应用程序接口),与服务器一起工作,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。 可以使用命名约定从数据库获取文件。JNDI为Java⽤户提供了使⽤Java编码语⾔在Java中搜索对象的⼯具。 简单来说呢,JNDI相当与是Java里面的一个api,它可以通过命名来查找数据和对象。
目前的Log4j2检测都需要借助dnslog平台,是否存在不借助dnslog的检测方式呢
汇总项目实施过程中可能出现的故障及解决方法。
一、前言 这篇文章可能出现一些图文截图颜色或者命令端口不一样的情况,原因是因为这篇文章是我重复尝试过好多次才写的,所以比如正常应该是访问6443,但是截图中是显示大端口比如60123这种,不影响阅读和文章逻辑,无需理会即可,另外k8s基础那一栏。。。本来想写一下k8s的鉴权,后来想了想,太长了,不便于我查笔记,还不如分开写,所以K8S基础那里属于凑数???写了懒得删(虽然是粘贴的:))
作为安全工程师,工作中多多少少会遇见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个安全工程师良好的习惯。每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是执着的继续努力,从中也积累了更多的经验。 下面汇总了可能出现的故障及解决方法,看看你是否遇到过?并对你有帮助?
Web安全常见漏洞修复建议
服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等) 子域名收集,旁站,C段等 google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等 传输协议,通用漏洞,ex
⽹上整理的⾯试问题⼤全,有些 HW ⾯试的题,已经收集好了,提供给⼤家。
VSole
网络安全专家