vue3+ts封装组件经验

1、组件效果:

2、 组件入参,props,

props:{
    labelList:{ // 存放卡片中要展示的label和prop,CONFIG_ITEM指定哪些字段是必传
        type:Array<CONFIG_ITEM>,
        default: () => []
    },
    dataList:{ // prop:value
        type:Object,
        default: () => {}
    }
}

3、考虑卡片有无标题的情况和文本对齐方式,使用透传属性

const attrs = useAttrs();
// 文本对齐方式,默认左对齐
const alignItem = attrs['input-align'] || 'left';
// 是否有标题,默认有标题
const isNoTitle = attrs.hasOwnProperty('is-title') || false;

4、对应的HTML

<div :class = "[itemAlign,isNotitle ? 'no-title' : '']" class="row" v-for="(item,index) in lableList" :key = "index">
    // 没有标题
    <div v-if="isNotitle">
        <p class = "subTitle">
            <span>{{ item?.label }}</span>
            <span :style ="item.style ? dataList[item.style] : ''">{{dataList[item.prop]}}             </span>
        </p>
    </div>
    <div v-else>
        <p class="title" v-if="index == 0">
            <!-- .... 省略  -->
        </p>
        <p class = "subTitle" v-else>
           <!-- .... 同上  -->
        </p>
    </div>
</div>

5、部分css

.row.right {
    .subtitle{
        display:flex,
        justify-content:space-between;
        align-items:center
    }
}
.row {
    .title {
        font-weight:500
    }
}

6、组件使用

<my-cell :label-list = "labelList" :data-list = "dataList" input-align = "right" is-no-title></my-cell>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值