vue二次封装成熟的组件 - timmer

timmer 2021-08-27 原文


vue二次封装成熟的组件

在开发过程中,我们经常会使用各种ui组件,有的时候需要二次封装,或者修改样式,以方便重复使用

以element举例:

<template>
    <el-input v-model="_value" />
</template>

<script>
export default {
    props: {
        value: {
            type: String,
            default: \'\'
        }
    },
    computed: {
        _value: {
            get() {
                return this.value;
            },
            set(val) {
                this.$emit(\'input\', val);
            }
        }
    }
// 其他额外的方法或操作
}
</script>

<style>
</style>

另外一种方式,则是通过render方法,将外部所有的参数原样传递过去

<script>
export default {
  name: `BaseInput`,
  functional: true,
  render(createElement, context) {
    return createElement(
      `el-input`,
      {
        ...context.data,
        props: {
          ...context.props
        },
        class: (context.data.staticClass || "") + " base_input",
        style: {
          width: context.props.width,
          ...context.data.staticStyle
        }
      },
      [
        context.slots().default //  also pass default slot to child
      ]
    );
  }
};
</script>

<style scoped>
.base_input >>> .el-input__inner {
  line-height: 39px;
  border: none;
  border-bottom: 1px solid rgba(68, 84, 105, 0.2);
  border-radius: 0;
  font-size: 16px;
  font-family: "Poppins";
  font-weight: 400;
  padding: 0;
  color: rgba(68, 84, 105, 1);
}
.base_input >>> .el-input__inner:focus {
  border-bottom: 1px solid rgba(68, 84, 105, 1);
}
</style>
[context.slots().default]部分,可以修改为context.children,就可以传递所有的slot
如果需要继承具名插槽
const _slots = context.slots();

 _slots.footer
          ? createElement(_slots.footer[0].tag, { slot: \'footer\' }, _slots.footer[0].children)
          : null

放在default后面即可,但是无法直接使用获取到的具名插槽,原因依旧不知道



ps:但是遇到过一个奇怪的问题,在封装ElImage的时候,slot传递失败,最后使用context.parent.$createElement进行创建元素才成功,原因不知道
发表于
2020-05-22 16:09 
timmer 
阅读(3373
评论(0
编辑 
收藏 
举报

 

版权声明:本文为timmer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/timmer/p/12937799.html

vue二次封装成熟的组件 - timmer的更多相关文章

  1. 混淆矩阵confusion_matrix – Betty__2017

    混淆矩阵confusion_matrix http://scikit-learn.org/stable/mod […]...

  2. 自动化测试总结 – zouhui

    自动化测试总结 2019-06-29 07:53  zouhui  阅读(17850)  评论(1)  编辑  […]...

  3. YUI3 resize – Ijavascript

    YUI3 resize Demo:<!DOCTYPE HTML> <html lang="z […]...

  4. 专访腾讯高级交互设计师WingST:交互设计师的思维、眼界、手段和精神 – jongde

    专访腾讯高级交互设计师WingST:交互设计师的思维、眼界、手段和精神 前段时间,小摹看完了一本书——《交互思 […]...

  5. Python 多线程、多进程 (一)之 源码执行流程、GIL – weilanhanf

    Python 多线程、多进程 (一)之 源码执行流程、GIL Python 多线程、多进程 (一)之 源码执行 […]...

  6. 【原创】(八)Linux内存管理 – zoned page frame allocator – 3

    背景 Read the fucking source code! –By 鲁迅 A picture […]...

  7. M – God of War

    M – God of War At 184~280 A.D ,there were many ki […]...

  8. API和SDK是什么?有什么区别?如何测试SDK? – 软件测试er

    API和SDK是什么?有什么区别?如何测试SDK? API:概念:API(Application Progra […]...

随机推荐

  1. 美团DB数据同步到数据仓库的架构与实践 – 美团技术团队

    美团DB数据同步到数据仓库的架构与实践 DB数据是大数据场景下进行数据分析与挖掘的重要数据来源,是ODS层数据 […]...

  2. 玩透个人所得税

    每次拿着工资条的时候,总有个代扣个税这么一项,不知道你们有没有想过这到底是怎样计算得出来的。下面我就给你们普及 […]...

  3. 以CentOS为操作系统的vps或服务器安装lnmp运行环境的方法

    安装步骤:1、使用putty或类似的SSH工具登陆VPS或服务器; 登陆后运行:screen -S lnmp […]...

  4. 个人简历用HTML编写

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 […]...

  5. JavaWeb_(视频网站)_五、视频模块1 视频上传

        视频模块   保存视频流程图     提交博客页面  submit-post-blog.html    […]...

  6. 基于 H5与webGL 的低碳工业园区监控系统

    前言 低碳工业园区的建设与推广是我国推进工业低碳转型的重要举措,低碳工业园区能源与碳排放管控平台是低碳工业园区 […]...

  7. java使用aspose.words实现Word拼接的功能

    需求:需要将其他模块生成的各个word汇总成一个整的Word。 参考官方介绍地址:https://apiref […]...

  8. ThreeJS学习6_几何体相关(BufferGeometry)

    ThreeJS学习6_几何体相关(BufferGeometry) 使用 BufferGeometry 可以有效 […]...

展开目录

目录导航