uniapp之自定义Tabs标签 主要是改uView的源码哈哈)

本文介绍了一位开发者在uniapp中遇到uView的Tabs组件无法自定义内容的问题,通过查看源码发现其核心是Text标签,不具备插槽功能。为解决这个问题,开发者决定修改源码,利用作用域插槽实现自定义。经过修改,成功实现了在不想自定义时使用默认内容,需要自定义时则通过作用域插槽传递值的功能,同时提供了适用于小程序、H5和App-Plus的代码示例。
摘要由CSDN通过智能技术生成

在uniapp引入uView组件时,发现使用Tabs组件不能自定义组件,只能传一些文字数字信息也没有插槽,官网效果如下

03a8de0f58ef4b5690f41e1a4320fd75.png

https://www.uviewui.com/components/tabs.html本

然后本人也想投机取巧,某度一下看看别个有没有好的解决方案,不仅没有找到,还有人骗我流量。 正准备自己自定义,或者把以前的封装的拿出来时,无意打开组件源码,好家伙,特好二改,分分钟就实现自定义tabs标签

第一步:找到文件

c3e247799b23467c94505e5678a17932.png

第二步:看一下源码复不复杂,复杂的话放弃(也不是不行)

a708d039dd034f63b5cf6ed9454bf2c1.png

 看到了吗,核心代码写的就是一个text标签,也没有插槽,所以不能自定义扩展组件。所以只要在这里改一下就好了。

第三步:修改思路主要是是利用作用域插槽传值

a2b448dff67a45dab0016664dbea81b2.png

0a065c35fa4448d2a7bbbff79814fed6.png

7f477e4039224822aac43ad17074e418.png

  •  总结就是利用作用域插槽,不想自定义的时候用默认内容,想自定义的时候利用作用域把值再传回来

核心代码粘一下

//修改

    <slot name="test" :item="item">

            <text

                    :class="[item.disabled && 'u-tabs__wrapper__nav__item__text--disabled']"

                    class="u-tabs__wrapper__nav__item__text"

                    :style="[textStyle(index)]"

            >{{ item[keyName] }}</text>



    </slot>

    //使用

    <u-tabs :list="list1" >

          <template v-slot:test="{ item }">

           {{item.name}}11

           </template>

    </u-tabs>

新增适应小程序(以上适用于web和app)(以下同时适配多端)

//源码修改方式
<view :class="[item.disabled && 'u-tabs__wrapper__nav__item__text--disabled']"
								class="u-tabs__wrapper__nav__item__text" :style="[textStyle(index)]">
    <!-- #ifdef MP -->
    <slot>{{ item[keyName] }}</slot>
    <slot name="lable{{index}}"></slot>
    <!-- #endif -->

    <!-- #ifdef H5 || APP-PLUS  -->
    <slot :name="`lable${index}`">{{ item[keyName] }}</slot>
    <!-- #endif -->

</view>
//改的位置和上面改的一样 看出来了这里主要是使用了动态插槽,因为小程序不支持作用域插槽

//使用
<u-tabs :list="list" @click="changeTab" lineWidth='40' lineHeight="5">
        <!-- #ifdef MP -->
        <template v-for="(item, index) in list" slot="lable{{index}}">
        <!-- #endif  -->
        <!-- #ifdef H5  || APP-PLUS   -->
        <template v-for="(item, index) in list" :slot="`lable${index}`">
                <!-- #endif -->
                <view >这里写自定义内推 </view>

        </template>
</u-tabs>

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值