2023-06-25 uview组件Vtabs 垂直选项卡无法滑动位移

发布时间 2023-06-25 23:12:53作者: 哎呦你可棒棒了

前言:uni项目中导入uview的vtabs插件来做分页,奈何导入demo后发现无法实现滑动页面来自动选中左侧菜单。

原因:大哥!请先看文档,文档里有写,设置chain为true即可左右联动!好吧,是我没留意。

解决方案:设置vtabs属性chain为true,官网示例代码:

<template>
    <view class="content">
        <uv-vtabs 
            :chain="chain"
            :list="list"
            @change="change">
            <template v-if="chain">
                <template v-for="(item,index) in list">
                        <uv-vtabs-item :index="index">
                            <view 
                                class="item"
                                v-for="(item2,index2) in item.childrens"
                                :key="index2">
                                <view class="item-title">
                                    <text class="text">{{item2.name}}</text>
                                </view>
                                <view class="item-content">
                                    <text class="text">{{item2.desc}}</text>
                                </view>
                            </view>
                            <view class="gap"
                                v-if="index<list.length-1">
                                <uv-gap bg-color="#f1f1f1"
                                    height="4"></uv-gap>
                            </view>
                        </uv-vtabs-item>
                    </template>
                </template>
                <template v-else>
                    <uv-vtabs-item>
                        <view 
                            class="item"
                            v-for="(item2,index2) in list2"
                            :key="index2">
                            <view class="item-title">
                                <text class="text">{{item2.name}}</text>
                            </view>
                            <view class="item-content">
                                <text class="text">{{item2.desc}}</text>
                            </view>
                        </view>
                    </uv-vtabs-item>
                </template>
        </uv-vtabs>
    </view>
</template>

<script>
const getList = [
  {
    name: "uv-ui简介",
    childrens: [
      {
        name: "uv-ui简介",
        desc:
          "1. uv-ui最初是在uview2.x的基础上进行改进优化,支持vue3等优化,最重要的是支持单独导入直接使用,无需在main.js中进行配置。\n\n2. uv-ui来源于社区,也回归到社区,正是有一群热爱uni-app生态的同学推着它前行,而我们也一如既往的承诺,uv-ui永久开源,永远免费。但是会在下载处进行广告配置,作为开发团队的研发费用的部分来源,所以希望大家理解。",
      },
    ],
  },
  {
    name: "uv-ui特点",
    childrens: [
      {
        name: "全端兼容",
        desc:
          "uv-ui支持App(vue)、App(nvue)、H5、小程序、VUE2、VUE3,支持nvue原生渲染。uv-ui的组件都是多端自适应的,底层会抹平很多小程序平台的差异或bug。",
      },
      {
        name: "集成工具",
        desc:
          "uv-ui中的uv-ui-tools组件集成了强大的网络请求 HTTP 及常用的工具函数,无需自己再去寻找,并且直接挂载在uni上面,方便使用,只需要在mian.js中引入即可,更多工具请参考:https://www.uvui.cn/js/http.html。使用方式请参考:https://www.uvui.cn/components/setting.html。",
      },
      {
        name: "主题扩展",
        desc:
          "uv-ui中的uv-ui-tools组件下面的theme.scss为主题文件,直接在uni.scss中引入主题即可,可以根据自己的需求进行扩展。下面也有说明具体使用方式。使用方法请参考:https://www.uvui.cn/components/setting.html",
      },
    ],
  },
  {
    name: "更新日志",
    badge: {
      show: true,
      value: 5,
    },
    childrens: [
      {
        name: "更新日志",
        desc:
          "uv-ui的重大更新在更新日志中都有所说明,如果在开发的过程中遇到文档不完善,可以提供给我们,我们会持续完善,非常感谢大家的支持。更新日志:https://www.uvui.cn/components/changelog.html",
      },
    ],
  },
  {
    name: "设计规范",
    childrens: [
      {
        name: "设计规范",
        desc:
          "为了约束合成更多优秀的组件和模板,打造优质的体验,我们拟定了一些UI界面设计和建议。同时部分之间会有依赖,这是为了减少代码冗余的同时提高开发效率,模块化是我们的基础。如果大家有好的建议,可以提出进行改进。",
      },
    ],
  },
  {
    name: "交流反馈",
    childrens: [
      {
        name: "交流反馈",
        desc:
          "uv-ui为采用MIT许可证的开源项目,使用完全免费。欢迎加QQ群交流反馈,一起学习,共同进步。QQ群: 549833913",
      },
    ],
  },
];
export default {
  data() {
    return {
      list: [],
      chain: true,
      value: 0,
    };
  },
  computed: {
    list2() {
      const _list = this.list[this.value]?.childrens;
      return _list ? _list : [];
    },
  },
  onReady() {
    // 模拟接口请求数据
    uni.showLoading({
      title: "加载中",
    });
    setTimeout(() => {
      this.list = getList;
      uni.hideLoading();
    }, 200);
  },
  methods: {
    change(index) {
      console.log("滚动中...");
      this.value = index;
    },
  },
};
</script>
<style scoped
    lang="scss">
.header {
  padding: 30rpx;
  font-size: 30rpx;
  color: #333;
}
.item {
  padding: 10rpx 20rpx;
  &-title {
    .text {
      font-weight: 700;
      font-size: 32rpx;
      color: #111;
    }
  }
  &-content {
    padding: 20rpx 0;
    .text {
      line-height: 48rpx;
      font-size: 30rpx;
      color: #111;
      /* #ifndef APP-NVUE */
      word-break: break-all;
      /* #endif */
    }
  }
}
.gap {
  padding: 0 30rpx;
}
</style>

其实你只需要把<uv-vtabs>里的chain改为true就行了。

 最后补充vtabs的官网文档:https://www.uvui.cn/components/vtabs.html