小兔鲜学习记录

本文介绍了一个基于Vue的前端项目中如何配置和使用路由及Vuex仓库。包括一级路由与二级路由的设置、动态组件加载以及通过Vuex进行状态管理的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小兔鲜学习记录:

原笔记地址:http://zhoushugang.gitee.io/erabbit-client-pc-document/guide/03-home.html

原项目教学地址,源自于b站https://www.bilibili.com/video/BV1jS4y1n7ej?p=47&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=32737e7b0c89272fde77fef3a7b3b3a0

1.代码目录

请添加图片描述

2.路由

在app.vue设置路由出口

<template>
  <!-- 一级路由 -->
  <router-view></router-view>
</template>

一级路由布局 src/views/Layout.vue

<template>
  <nav>顶部通栏</nav>
  <header>头部</header>
  <main>
    <!-- 二级路由 -->
    <router-view></router-view>
  </main>
  <footer>底部</footer>
</template>

<script>
export default {
  name: 'xtx-layout'
}
</script>

<style scoped lang='less'></style>

二级路由首页 src/views/home/index.vue

<template>
  <div class='xtx-home-page'>
    首页
  </div>
</template>

<script>
export default {
  name: 'xtx-home-page'
}
</script>

<style scoped lang='less'></style>

2者是通过src/router/index.js里的配置联系在一起的

import { createRouter, createWebHashHistory } from 'vue-router'
import TopCategory from '@/views/category'
import SubCategory from '@/views/category/sub'
const Layout = () => import('@/views/Layout')
const Home = () => import('@/views/home/index')
const routes = [
  {
    path: '/',
    component: Layout,
    children: [
      { path: '/', component: Home },
      { path: '/category/:id', component: TopCategory },
      { path: '/category/sub/:id', component: SubCategory }]
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

export default router

通过routes里面的路由规则,实现了一级路由,二级路由是一级路由的children,所以在一级路由布局里面有二级路由的出口。

3.仓库
import { createStore } from 'vuex'

// 创建vuex仓库并导出
export default createStore({
  state: {
    // 数据
  },
  mutations: {
    // 改数据函数
  },
  actions: {
    // 请求数据函数
  },
  modules: {
    // 分模块
  },
  getters: {
    // vuex的计算属性
  }
})

/src/store/category.js是一个分类的模块

// 存储的分类数据
import { topCategory } from '@/api/constants'
import { findAllCategory } from '@/api/category'

export default {
  namespaced: true,
  state: () => {
    return {
      // 如果默认是[]数组,看不见默认的9个分类,等你数据加载完毕才会看到。
      // 所以:根据常量数据来生成一个默认的顶级分类数据,不会出现空白(没数据的情况)
      list: topCategory.map(item => ({ name: item }))
    }
  },
  // 加载数据成功后需要修改list所以需要mutations函数
  mutations: {
    setList (state, headCategory) {
      state.list = headCategory
    },
    // 修改当前一级分类下的open数据为true
    show (state, item) {
      const category = state.list.find(category => category.id === item.id)
      category.open = true
    },
    // 修改当前一级分类下的open数据为false
    hide (state, item) {
      const category = state.list.find(category => category.id === item.id)
      category.open = false
    }
  },
  // 需要向后台加载数据,所以需要actions函数获取数据
  actions: {
    async getList ({ commit }) {
      const { result } = await findAllCategory()
      // 给一级分类加上一个控制二级分类显示隐藏的数据open
      result.forEach(item => {
        item.open = false
      })
      // 获取数据成功,提交mutations进行数据修改
      commit('setList', result)
    }
  }
}

从里面可以看出

state里面的数据是从@/api/constants这里来的,即下面这个列表

// 顶级分类
export const topCategory = [
  '居家',
  '美食',
  '服饰',
  '母婴',
  '个护',
  '严选',
  '数码',
  '运动',
  '杂货'
]

如果没有请求的话就会使用这一个数组

这个分类实际上是要从后台获取

仓库中的actions去请求数据将结果通过commit提交给mutations,由他去修改数据

使用时:

setup () {
    const store = useStore()
    const list = computed(() => {
      return store.state.category.list
    })
    const show = (item) => {
      store.commit('category/show', item)
    }
    const hide = (item) => {
      store.commit('category/hide', item)
    }
    return { list, show, hide }
  }

使用computed得到仓库里的list,然后在返回list

### Vue3 小兔 Home 页面开发笔记 #### 项目结构设置 在Vue3的小兔项目中,采用的是工程化开发模式,在Webpack环境中搭建Vue应用。为了更好地管理不同功能模块,通常会按照业务逻辑划分文件夹。对于Home页面的实现,可以参照如下目录结构: - `src/views/Home/index.vue`:用于放置主页的具体视图组件。 此做法遵循了企业级项目的常见实践[^1]。 #### 创建Home页面模板 针对小兔中的Home页面,可以在对应的路径下新建`index.vue`文件,并编写基础HTML结构来定义页面布局。例如: ```html <template> <div class="home-container"> <!-- 主页头部 --> <header>欢迎来到小兔</header> <!-- 商品展示区 --> <section> <ul> <li v-for="(item, index) in productList" :key="index">{{ item.name }}</li> </ul> </section> <!-- 底部版权信息 --> <footer>© 2024 XiaoTuXian Inc.</footer> </div> </template> ``` 这段代码展示了如何构建一个简单的商品列表显示区域以及必要的页面框架[^2]。 #### 配置路由导航至Home页面 为了让用户能够通过URL访问到Home页面,需配置好路由规则。利用Vue Router插件提供的API完成这一操作: ```javascript import { createRouter, createWebHistory } from 'vue-router'; // 导入各个页面组件... const routes = [ { path: '/', name: 'Home', component: () => import('@/views/Home/index.vue') }, ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` 这里设置了默认路径指向Home页面,并启用了浏览器历史记录管理模式以便于SEO优化和用户体验提升[^3]。 #### 添加交互行为 如果希望给Home页面增加更多动态效果或响应用户的某些动作,则可以通过绑定事件处理器的方式实现。比如点击某个链接跳转其他页面或者执行特定的操作等。下面是一个简单的例子说明如何处理删除购物车项的动作: ```html <!-- 删除按钮示例 --> <td class="tc"> <p><a @click="deleteCartItem(item.id)" class="green" href="javascript:void(0)">移除</a></p> </td> ``` 上述片段展示了怎样监听用户的点击事件并调用相应的JavaScript方法来进行数据更新或其他逻辑处理[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值