当前位置:首页 > uni-app

uniapp分类菜单

2026-02-06 01:59:34uni-app

实现UniApp分类菜单的方法

使用uni-ui的uni-list组件 在UniApp中可以通过uni-ui提供的组件快速实现分类菜单效果。安装uni-ui后,在pages.json中引入组件:

"easycom": {
  "autoscan": true,
  "custom": {
    "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
  }
}

页面模板中使用:

<uni-list>
  <uni-list-item title="食品分类" showArrow />
  <uni-list-item title="电子产品" showArrow />
  <uni-list-item title="服装配饰" showArrow>
    <template v-slot:footer>
      <uni-tag text="热销" type="error" />
    </template>
  </uni-list-item>
</uni-list>

自定义侧边栏分类 通过flex布局实现左右分栏的经典分类菜单:

uniapp分类菜单

<view class="menu-container">
  <scroll-view scroll-y class="left-menu">
    <view 
      v-for="(item,index) in categories" 
      :key="index"
      :class="['menu-item', activeIndex===index?'active':'']"
      @click="changeCategory(index)">
      {{item.name}}
    </view>
  </scroll-view>

  <scroll-view scroll-y class="right-content">
    <view v-for="sub in subCategories" :key="sub.id">
      <text class="sub-title">{{sub.name}}</text>
      <view class="goods-list">
        <!-- 商品项循环 -->
      </view>
    </view>
  </scroll-view>
</view>

对应CSS样式:

.menu-container {
  display: flex;
  height: 100vh;
}
.left-menu {
  width: 25%;
  background: #f8f8f8;
}
.menu-item {
  padding: 20rpx;
  text-align: center;
  &.active {
    color: #ff5500;
    background: #fff;
    border-left: 4rpx solid #ff5500;
  }
}
.right-content {
  width: 75%;
  padding: 20rpx;
}

数据绑定处理 在script部分处理分类数据交互:

uniapp分类菜单

export default {
  data() {
    return {
      categories: [
        {id:1, name:'生鲜食品'},
        {id:2, name:'数码家电'},
        {id:3, name:'美妆个护'}
      ],
      activeIndex: 0,
      subCategories: []
    }
  },
  methods: {
    changeCategory(index) {
      this.activeIndex = index
      // 模拟获取子分类
      this.subCategories = this.getSubCategories(this.categories[index].id)
    },
    getSubCategories(parentId) {
      // 实际项目中应调用接口获取数据
      const mockData = {
        1: [
          {id:11, name:'新鲜水果'},
          {id:12, name:'海鲜水产'}
        ],
        2: [
          {id:21, name:'手机通讯'},
          {id:22, name:'电脑配件'}
        ]
      }
      return mockData[parentId] || []
    }
  }
}

添加交互效果 增强用户体验的交互方案:

// 在onLoad中初始化数据
onLoad() {
  this.changeCategory(0)
  // 或者调用接口获取分类数据
  uni.request({
    url: 'https://api.example.com/categories',
    success: (res) => {
      this.categories = res.data
    }
  })
}

优化性能的方案 对于大量分类数据的情况:

// 使用计算属性避免重复计算
computed: {
  currentSubCategories() {
    return this.getSubCategories(this.categories[this.activeIndex]?.id)
  }
}

注意事项

  • 滚动区域需要设置固定高度
  • 小程序端scroll-view组件必须指定高度
  • 分类数据量大时可考虑分页加载
  • H5端注意处理滚动穿透问题

以上方案可根据实际项目需求进行组合或调整,uni-ui提供了丰富的组件可以快速构建分类界面,而自定义方案则具有更高的灵活性。

标签: 菜单uniapp
分享给朋友:

相关文章

uniapp教程

uniapp教程

uniapp 基础介绍 uniapp 是一个基于 Vue.js 的跨平台开发框架,支持一次开发,多端发布(如微信小程序、H5、App、快应用等)。其核心优势在于代码复用率高,学习成本低,适合快速构建多…

uniapp极光推送

uniapp极光推送

uniapp极光推送集成步骤 准备工作 注册极光推送开发者账号,创建应用获取AppKey。确保uniapp项目已配置好原生插件支持。 安装插件 在uniapp项目manifest.json文件中,选…

vue菜单实现

vue菜单实现

实现Vue菜单的基本方法 使用Vue.js创建菜单可以通过多种方式实现,包括使用原生Vue组件、第三方UI库或自定义解决方案。以下是几种常见的实现方法: 使用原生Vue组件 创建基本的菜单结构可以…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 基于路由的动态菜单 在 Vue 项目中,可以利用 Vue Router 实现动态菜单。首先定义路由配置,包含菜单所需的元信息(如标题、图标等)。 const routes =…

css菜单制作

css菜单制作

CSS 菜单制作方法 水平导航菜单 使用 display: inline-block 或 flexbox 可以轻松创建水平导航菜单。以下是一个基本示例: <nav> <ul c…

uniapp应用市场

uniapp应用市场

uniapp应用市场概述 Uniapp作为跨平台开发框架,支持将代码编译到iOS、Android、Web及各类小程序平台。其应用市场(插件市场)是开发者获取扩展插件、模板、组件的重要资源库,涵盖UI组…