当前位置:首页 > uni-app

uniapp二级导航栏

2026-03-26 14:40:15uni-app

实现二级导航栏的基本方法

在UniApp中实现二级导航栏,可以通过<scroll-view>结合自定义样式或使用官方组件完成。以下是一个基础实现示例:

<template>
  <view>
    <!-- 一级导航 -->
    <scroll-view scroll-x class="nav-primary">
      <view 
        v-for="(item, index) in primaryList" 
        :key="index"
        :class="['primary-item', currentPrimary === index ? 'active' : '']"
        @click="switchPrimary(index)"
      >
        {{item.name}}
      </view>
    </scroll-view>

    <!-- 二级导航 -->
    <scroll-view scroll-x class="nav-secondary">
      <view 
        v-for="(subItem, subIndex) in secondaryList" 
        :key="subIndex"
        :class="['secondary-item', currentSecondary === subIndex ? 'active' : '']"
        @click="switchSecondary(subIndex)"
      >
        {{subItem.name}}
      </view>
    </scroll-view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      primaryList: [
        {name: '分类1', subItems: [{name: '子类1'}, {name: '子类2'}]},
        {name: '分类2', subItems: [{name: '子类3'}, {name: '子类4'}]}
      ],
      currentPrimary: 0,
      currentSecondary: 0,
      secondaryList: []
    }
  },
  created() {
    this.secondaryList = this.primaryList[0].subItems
  },
  methods: {
    switchPrimary(index) {
      this.currentPrimary = index
      this.secondaryList = this.primaryList[index].subItems
      this.currentSecondary = 0
    },
    switchSecondary(index) {
      this.currentSecondary = index
    }
  }
}
</script>

<style>
.nav-primary, .nav-secondary {
  white-space: nowrap;
  background-color: #f8f8f8;
}
.primary-item, .secondary-item {
  display: inline-block;
  padding: 10px 15px;
}
.active {
  color: #007AFF;
  border-bottom: 2px solid #007AFF;
}
</style>

使用UI组件库优化

推荐使用uni-ui或第三方UI库简化开发:

uniapp二级导航栏

  1. 安装uni-ui

    npm install @dcloudio/uni-ui
  2. 使用分段器组件:

    uniapp二级导航栏

    <template>
    <view>
     <uni-segmented-control 
       :current="currentPrimary" 
       :values="primaryItems" 
       @clickItem="onClickPrimary"
     />
     <uni-segmented-control 
       :current="currentSecondary" 
       :values="secondaryItems" 
       @clickItem="onClickSecondary"
     />
    </view>
    </template>

动态加载二级导航数据

通过接口动态获取导航数据更符合实际场景:

async loadNavData() {
  const res = await uni.request({
    url: 'https://api.example.com/navigation'
  })
  this.primaryList = res.data.primary
  this.secondaryList = this.primaryList[0].children
}

样式优化技巧

添加滑动动画效果:

.nav-secondary {
  transition: all 0.3s ease;
}
.secondary-item {
  transition: color 0.2s;
}

注意事项

  • 在小程序端需注意scroll-view的横向滚动需设置enable-flex属性(微信小程序)
  • H5端可能需要额外处理滚动条样式隐藏
  • 考虑添加加载状态处理异步数据场景
  • 高亮状态建议使用CSS变量实现主题色统一管理

标签: uniapp
分享给朋友:

相关文章

uniapp实名认证

uniapp实名认证

uniapp实名认证实现方法 使用uniCloud实名认证插件 uniapp官方提供了uniCloud的实名认证插件,可快速集成到项目中。插件支持身份证识别、活体检测等功能,需在uniCloud控制台…

uniapp分享到facebook

uniapp分享到facebook

使用uniapp分享到Facebook的方法 在uniapp中实现分享到Facebook功能,可以通过调用原生插件或使用第三方SDK。以下是具体实现方式: 安装Facebook SDK插件 在uni…

uniapp使用axios无法请求

uniapp使用axios无法请求

uniapp中使用axios请求问题解决方案 在uniapp中使用axios可能会遇到跨域、请求失败或兼容性问题。以下是常见原因及解决方法: 检查axios安装与引入 确保已正确安装axios:…

uniapp悬浮

uniapp悬浮

实现悬浮效果的方法 在UniApp中实现悬浮效果可以通过CSS的position: fixed或position: sticky属性结合动态样式控制来实现。以下是具体实现方式: 使用CSS固…

uniapp全局校验

uniapp全局校验

uniapp全局校验的实现方法 在uniapp中实现全局校验可以通过多种方式,主要包括拦截器、全局混入和自定义指令等方法。 使用请求拦截器进行校验 在main.js中配置请求拦截器,对所有请求进行统…

uniapp混合oc

uniapp混合oc

uniapp 与 Objective-C 混合开发指南 实现原理 uniapp 通过原生插件机制与 Objective-C 交互,需通过原生模块桥接。核心步骤包括编写原生模块、注册插件、在 uniap…