vue element-ui实现动态面包屑导航

yizhihongxing

一、概述

面包屑导航是指网站或应用程序主导航之外的一种辅助性导航元素。随着单页应用(SPA)的普及,动态面包屑导航也变得越来越常见。Vue Element-UI提供了很好的组件支持,可以轻松实现动态面包屑导航的功能。

二、步骤

  1. 安装Vue和Element-UI

在Vue Element-UI中使用动态面包屑导航功能,需要先安装Vue和Element-UI。可以使用npm或yarn进行安装(本示例中将使用npm):

npm install vue
npm install element-ui
  1. 创建路由

创建Vue Router路由配置文件并进行配置。在每个路由对象中,需要设置“meta”字段来存储动态面包屑导航信息。例如:

const router = new VueRouter({
  routes: [
    {
      path: '/home',
      name: 'home',
      component: Home,
      meta: {
        title: '首页'
      }
    },
    {
      path: '/user',
      name: 'user',
      component: User,
      meta: {
        title: '用户管理',
        breadcrumb: true
      },
      children: [
        {
          path: 'list',
          name: 'user-list',
          component: UserList,
          meta: {
            title: '用户列表'
          }
        },
        {
          path: 'edit/:id',
          name: 'user-edit',
          component: UserEdit,
          meta: {
            title: '编辑用户'
          }
        }
      ]
    }
  ]
})

在这个示例中,/home和/user/list路由对象中都设置了“meta”信息,/user和/user/edit/:id没有设置。同时,示例中有一个nested路由/user,表示用户管理页面下还可以再进行更深层次的子路由。

  1. 创建组件

在创建Vue组件时,可以使用$route对象来获取当前页面的信息。这个信息可以是路由参数,也可以是meta信息。

示例代码:

<template>
  <el-breadcrumb separator="/">
    <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
    <el-breadcrumb-item v-for="(item, index) in breadcrumbList" :key="item.name" :to="{ path: item.path }">{{ item.title }}</el-breadcrumb-item>
  </el-breadcrumb>
</template>

<script>
export default {
  data () {
    return {
      breadcrumbList: []
    }
  },
  mounted () {
    this.getBreadcrumb()
  },
  watch: {
    $route () {
      this.getBreadcrumb()
    }
  },
  methods: {
    getBreadcrumb () {
      const matched = this.$route.matched.filter(item => item.meta.breadcrumb)

      if (matched.length === 0) {
        this.breadcrumbList = []
      } else {
        this.breadcrumbList = matched.map(item => {
          return {
            name: item.name,
            path: item.path,
            title: item.meta.title
          }
        })
      }
    }
  }
}
</script>

在这个示例中,我们新建了一个动态面包屑导航组件,并通过$watch监听$route变化。在组件mounted生命周期中,调用了getBreadcrumb方法。

getBreadcrumb方法是核心方法,它首先通过this.$route.matched获取匹配的路由对象数组,然后过滤掉没有设置breadcrumb的路由对象。如果没有匹配到任何路由对象,则面包屑导航数组为空;否则,根据匹配到的路由对象数组map,并返回一个新的对象数组,对象中包括name、path以及title属性。

  1. 使用组件

然后,在需要应用动态面包屑导航的页面/组件中使用Breadcrumb组件。

<template>
  <div>
    // 具体页面内容
    <breadcrumb></breadcrumb>
  </div>
</template>

<script>
import Breadcrumb from '@/components/Breadcrumb.vue'

export default {
  components: {
    Breadcrumb
  }
}
</script>

备注:这里的breadcrumb标签就是在新建组件Breadcrumb时注册的组件名称。

  1. 完成

至此,应用动态面包屑导航的功能已经全部完成。在通过左侧导航栏进入“用户管理”模块,即可看到动态生成的面包屑导航。

三、示例

下面给出一个较为具体的示例,演示如何在ElementUI中使用动态面包屑导航。

  1. 安装Vue和ElementUI
npm install vue
npm install element-ui
  1. 创建路由

在router/index.js中,新建路由对象,并在每个路由对象中设置“meta”字段来存储动态面包屑导航信息。当前示例中,我们设置了3个路由对象:首页(/home)、用户管理(/user)、用户列表(/user/list)。

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home.vue'
import User from '@/components/User.vue'
import UserList from '@/components/UserList.vue'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      redirect: '/home'
    },
    {
      path: '/home',
      name: 'home',
      component: Home,
      meta: {
        title: '首页'
      }
    },
    {
      path: '/user',
      name: 'user',
      redirect: '/user/list',
      component: User,
      meta: {
        title: '用户管理',
        breadcrumb: true
      },
      children: [
        {
          path: 'list',
          name: 'user-list',
          component: UserList,
          meta: {
            title: '用户列表'
          }
        }
      ]
    }
  ]
})
  1. 创建组件

在src/components/Breadcrumb.vue中,新建组件Breadcrumb,并通过$route对象获取当前页面的信息,从而动态生成面包屑导航。

<template>
  <el-breadcrumb separator="/">
    <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
    <el-breadcrumb-item v-for="(item, index) in breadcrumbList" :key="item.name" :to="{ path: item.path }">{{ item.title }}</el-breadcrumb-item>
  </el-breadcrumb>
</template>

<script>
export default {
  data () {
    return {
      breadcrumbList: []
    }
  },
  mounted () {
    this.getBreadcrumb()
  },
  watch: {
    $route () {
      this.getBreadcrumb()
    }
  },
  methods: {
    getBreadcrumb () {
      const matched = this.$route.matched.filter(item => item.meta.breadcrumb)

      if (matched.length === 0) {
        this.breadcrumbList = []
      } else {
        this.breadcrumbList = matched.map(item => {
          return {
            name: item.name,
            path: item.path,
            title: item.meta.title
          }
        })
      }
    }
  }
}
</script>
  1. 使用组件

在src/components/UserList.vue中,应用面包屑导航组件,并通过向其中传递一个固定的列表项,演示动态生成面包屑导航的效果。

<template>
  <div>
    <b-crumb :items="list"></b-crumb>
    <el-table :data="tableData">
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="gender" label="性别"></el-table-column>
      <el-table-column prop="age" label="年龄"></el-table-column>
    </el-table>
  </div>
</template>

<script>
import Breadcrumb from '@/components/Breadcrumb.vue'

export default {
  components: {
    Breadcrumb
  },
  data () {
    return {
      list: [
        { path: '/', name: '首页' },
        { path: '/user', name: '用户管理' },
        { path: '/user/list', name: '用户列表' }
      ],
      tableData: [{
        name: '张三',
        gender: '男',
        age: 28
      }, {
        name: '李四',
        gender: '女',
        age: 30
      }]
    }
  }
}
</script>

<style scoped>
.el-breadcrumb {
  margin-bottom: 10px;
}
</style>

到这里,动态面包屑导航已经实现了。

四、总结

Vue Element-UI提供了很好的组件支持,可以轻松实现动态面包屑导航的功能。通过跟随路由配置文件中的meta信息,结合组件的生命周期方法及$route对象的动态属性变化,可以简单实现动态生成面包屑导航的效果。最后,由于动态面包屑导航需要根据路由实现,维护路由的完整性及一致性是关键,需要在路由开发中做好规划和设计。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue element-ui实现动态面包屑导航 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法

    关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法,需要考虑以下几个方面: 了解什么是字符编码 字符编码是计算机在处理文本时采用的一种方式,用数字来代表各种字符,包括数字、字母、符号、汉字等等。字符编码的常见表示方式包括 ASCII、GB2312、GBK、UTF-8 等。 理解客户端与服务器端的字符编码要求 客户端和服务器端在处…

    JavaScript 2023年5月19日
    00
  • Javascript 遍历对象中的子对象

    Javascript 遍历对象中的子对象通常使用递归的方式实现,具体步骤如下: 1. 判断对象是否为字典 使用 typeof 运算符判断对象类型是否为 object,进一步判断该对象是否为字典(即 {} 类型),如果不是,则直接输出当前对象: function traverseObject(obj, indentation) { if (typeof obj…

    JavaScript 2023年5月27日
    00
  • Textbox控件注册回车事件及触发按钮提交事件具体实现

    Textbox控件注册回车事件及触发按钮提交事件是Web开发中常用的技术之一。下面我将详细讲解如何实现这个功能。 注册回车事件 在Textbox控件中,我们可以向其绑定keypress事件,通过该事件判断当用户按下回车键时执行某些操作,比如提交表单等。下面是一个简单示例: <input type="text" id="my…

    JavaScript 2023年6月11日
    00
  • JS访问SWF的函数用法实例

    JS访问SWF函数用法实例攻略 在Web开发中,有时我们需要在JS中调用SWF动画中的函数,来实现一些交互效果。本攻略将详细讲解如何在JS中访问SWF函数,并提供两个实例说明。 步骤一:为SWF函数起一个别名 在AS3中,为了让JS能访问到SWF中的函数,我们需要给这个函数起一个别名。别名可以在发布SWF文件时以“flashvars”参数的形式传递。此处声明…

    JavaScript 2023年5月27日
    00
  • js设置cookie过期当前时间减去一秒相当于立即过期

    设置Cookie的过期时间可以通过在Cookie中添加一个用于标识过期时间的Expires属性来实现。通常情况下,Expires属性的值可以是时间戳,表示Cookie的过期时间是基于指定的时间来计算。但如果我们需要相对于当前时间来设置Cookie的过期时间,那么就需要进行一些计算。 具体实现方法是:将当前时间的时间戳减去1秒的时间戳,然后将其转换为UTC格式…

    JavaScript 2023年5月27日
    00
  • Canvas实现放射线动画效果

    Canvas实现放射线动画效果 在本文中,我们将讲解如何利用Canvas实现一个放射线动画效果。该效果可以用于网站的背景,也可以被应用于其他UI元素的装饰。 实现步骤 步骤一:创建Canvas元素 首先,我们需要在HTML中添加Canvas元素。具体来说,我们可以这样编写代码: <canvas id="canvas" width=&…

    JavaScript 2023年6月11日
    00
  • JavaScript中数组对象的那些自带方法介绍

    下面就为大家详细介绍JavaScript中数组对象的自带方法。 1. 增加、删除、修改元素 push、pop、shift、unshift方法 push方法:在数组的末尾插入一个或多个元素,并返回数组新的长度。 pop方法:删除数组的最后一个元素,并返回该元素的值。 shift方法:删除数组的第一个元素,并返回该元素的值。 unshift方法:在数组的开头插入…

    JavaScript 2023年5月27日
    00
  • JavaScript中十种一步拷贝数组的方法实例详解

    JavaScript中十种一步拷贝数组的方法实例详解 在JavaScript中,我们常常需要对数组进行复制或者克隆,以便在之后的操作中更加方便。本文将详细讲解JavaScript中十种一步拷贝数组的方法,并给出相应的实例说明。 1. 使用数组的slice方法 let arr1 = [1, 2, 3, 4, 5]; let arr2 = arr1.slice(…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部