• 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: {
               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进行创建元素才成功,原因不知道
  • 相关阅读:
    小清新数论题泛做
    近日模考理数压轴题简记
    带边数的无向连通图计数
    ZJOI2019 简记
    SDOI2019 R2D2 题解
    [补档题解]后缀树节点数
    [BJ United Round 3] 押韵
    高维 DFT 算法(FWT 快速沃尔什变换)
    SDOI2019 R2D1 题解
    LOJ#6713. 「EC Final 2019」狄利克雷 k 次根 加强版
  • 原文地址:https://www.cnblogs.com/timmer/p/12937799.html
Copyright © 2020-2023  润新知