Vue + Element-UI —— 项目实战(六)

简介: Vue + Element-UI —— 项目实战(六)

项目演示

项目教学视频链接

https://www.bilibili.com/video/BV1dY411T71E?t=32.3

vue + element-ui 项目演示

六、项目实战六

Ⅰ、面包屑切换功能

1. 面包屑数据处理
  1. 在 views 文件夹下创建 ./mall/index.vue 和 ./other/pageOne.vue 和 ./other/pageTwo.vue 文件

7c25aae8095f4bd99890d89aab598b5e.png

  1. 在 ./router/index.js 中配置路由
  {
      path: "/mall",
      name: "mall",
      component: mall,
    },
    {
      path: "/page1",
      name: "page1",
      component: pageOne,
    },
    {
      path: "/page2",
      name: "page2",
      component: pageTwo,
    }
2. 使用 vuex 进行通信
  1. 在 ./store/tab.js 中进行相关配置(配置初始数据)
  state: {
    // 定义首页导航初始数据(面包屑)
    tabsList: [
      {
        path: '/',
        name: 'home',
        label: '首页',
        icon: 'home'
      }
    ],   
    // 是否高亮
    currentMenu: null,
    menu: []
  },
  1. 在 ./store/tab.js 中进行相关配置(配置 mutations)
  mutations: {
    // 改变state中的tabsList数据
      selectMenu(state, val) {
        // 当前点击的菜单不是首页
        if(val.name !== 'home') {
          // currentMenu 等于传入进来的数据
          state.currentMenu = val
          // 拿到当前选中项的索引(看看存不存在)
          const result = state.tabsList.findIndex(item => item.name === val.name)
          // 不存在的时候添加数据
          if(result === -1) {
            state.tabsList.push(val)
          }
        }else{
          // 是首页就对当前选中的标识重置
          state.currentMenu = null
        }
      },
  }
  1. 在 CommonAside.vue 中添加点击事件
  clickMenu(item) {
      // 点击进行页面跳转 使用的是push方法
      this.$router.push({
        name: item.name,
      });
      // item为对应的menu的数据
      this.$store.commit('selectMenu', item)
    }
  1. 在 CommonHeader.vue 中注入数据
  <!-- 面包屑 -->
    <el-breadcrumb separator="/">
      <!-- 遍历面包屑的数据 -->
      <el-breadcrumb-item v-for="item in tags" :key="item.path" :to="{ path: item.path }">{{item.label}}</el-breadcrumb-item>
    </el-breadcrumb>
  computed: {
    ...mapState({
      // 面包屑数据
      tags: state => state.tab.tabsList
    })
  }

dc56c46713ce4e3f80c7f08f7f01c6c0.png

Ⅱ、Tag 切换功能

1. tag 页面
  1. 创建 CommonTag.vue 文件
<template>
  <div class="tabs">
    <!-- 
      :closable:除了首页以外的tag都可关闭
      :effect:主题,路由和tag名称一样的显示高亮
     -->
    <el-tag
      v-for="(tag, index) in tags"
      :key="tag.name"
      :closable="tag.name !== 'home'"
      :effect="$route.name === tag.name ? 'dark' : 'plain'"
      @click="changeMenu(tag)"
      @close="handleClose(tag, index)"
      size="small"
    >
      <!-- 显示对应的名称 -->
      {{tag.label}}
    </el-tag>
  </div>
</template>
<script>
import {mapState, mapMutations} from 'vuex'
export default {
    name: 'CommonTag',
    data() {
      return {}
    },
    computed: {
      ...mapState({
        // tags对应vuex中的tabsList
        tags: state => state.tab.tabsList
      })
    },
    methods:{
      ...mapMutations({
        close: 'closeTag'
      }),
      changeMenu(item){
        // 路由的切换
        this.$router.push({name: item.name})
      },
      handleClose(tag, index) {
        // 拿到tag的总长度
        const length = this.tags.length - 1
        // 调用mutations里面的closeTag方法
        this.close(tag)
        // 删除的tag名字不是当前的路由名字,则不用删除
        if(tag.name !== this.$route.name){
          return;
        }
        // 最右侧的tag
        if(index === length) {
          this.$router.push({
            name: this.tags[index-1].name //向左跳转
          })
          // 删除的tag在中间,向右跳转
        } else {
          this.$router.push({
            name: this.tags[index].name
          })
        }
      }
    }
};
</script>
<style lang="less" scoped>
.tabs {
  padding: 20px;
  .el-tag {
    margin-right: 15px;
    cursor: pointer;
  }
}
</style>
2. 关闭标签函数
  1. 在 tab.js 的 mutations 中定义关闭 tag 的函数
  closeTag(state, val) {
      // 找到当前的标签
      const result =  state.tabsList.findIndex(item => item.name === val.name)
      // 将它从数据源中删掉
      state.tabsList.splice(result, 1)
    },
3. 主页面展示
  1. 在 main.js 中的 头部 和 主体 部分之间显示该部分组件
  <el-container>
    <el-header>
        <common-header></common-header>
      </el-header>
      <!-- 头部下面的编辑标签 -->
      <common-tag></common-tag>
      <!-- 主体部分 -->
      <el-main>
        <router-view></router-view>
      </el-main>
  </el-container>
  // 在 Main.vue 中导入tag公共样式
  import CommonTag from "@/components/CommonTag.vue";

dbd118a7360f488888e24f1268767312.png

不积跬步无以至千里 不积小流无以成江海

目录
打赏
0
0
0
0
10
分享
相关文章
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
48 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
97 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
这篇文章介绍了如何使用Ant Design Vue UI框架创建一个简单的后台管理模板,包括创建Vue项目、安装和使用ant-design-vue、以及编写后台管理通用页面的代码和样式。
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
vue element-ui 中el-message重复弹出问题解决 el-message重复弹出解决办法
vue element-ui 中el-message重复弹出问题解决 el-message重复弹出解决办法
370 49
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
366 0
[译] 在 Vue 组件中分离 UI 和业务逻辑。
[译] 在 Vue 组件中分离 UI 和业务逻辑。
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
389 0
Vue实现Element UI框架的自定义输入框或下拉框在输入时对列表选项进行过滤,以及右键列表选项弹出菜单进行删除
本文介绍了如何在Vue框架结合Element UI库实现自定义输入框或下拉框,在输入时对列表选项进行过滤,并支持右键点击列表选项弹出菜单进行删除的功能。
218 0
Vue+Element UI
该博客文章介绍了如何在Vue中集成Element UI来构建后台管理系统的左侧菜单,包括使用`el-menu`、`el-submenu`和`el-menu-item`等组件,并通过Vue router动态构建菜单项及其路由设置。
|
8月前
|
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
212 5

热门文章

最新文章

相关实验场景

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等