Vue项目中富文本编辑器组件二次封装实践

最近接到一个小需求,要求对原项目的富文本编辑器进行统一化。由于之前没有具体的规范约束,该PC端项目中在不同模块中分别引入了3种不一样的富文本编辑器,一来不便于维护,二来样式不统一,用户使用也可能存在疑惑,于是我需要考虑重新封装一个富文本编辑器组件,再将旧代码中引入的富文本编辑器组件统一替换为新的。以下记录整个任务实现的大致思路。


首先,分析代码结构,发现项目中不同的模块分别使用了两种不同的form组件,element-UI和iView。

f561611a875d495497b9b0a7a5bbb974.png

2a4d7ce727fd4d088c2592c809f21b1b.png

因此,需要对富文本编辑器组件最外层的form-item组件进行判断处理,这里使用了Vue内置的component动态组件,绑定is属性动态渲染对应的form-item组件。 

<template>
  <!--  根据页面使用form是elementUI还是iView,外层使用对应的formItem组件(兼容旧代码有的用iView有的用elementUI的情况)  -->
  <!--  初始化时先默认不渲染,等获取到dom节点后再渲染,解决控制台在created阶段报错-->
  <component :is="wrapForm" v-if="isMounted" :rulesList="rulesList" :label="label" :lableWidth="labelWidth"
             :required="required" :prop="prop">
    <div class="fullEdit">
      ...
    </div>
  </component>
</template>

而判断条件为父组件中的dom元素是否包含类名“el-form”,是则渲染el-form-item组件,否则渲染iview的form-item组件。

created() {
    this.$nextTick(()=>{
      this.isElForm = document.querySelector('.mainCont').querySelector('.el-form') !== null
      this.isMounted = true
      ...
    })
  },
computed: {
    ...
    //渲染哪种外层form-item组件,elementUI或iView的form-item
    wrapForm() {
      return this.isElForm ? 'elFormIte
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Koen_Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值