vue实现导航栏效果(选中状态刷新不消失)

Vue实现导航栏效果,一般情况下会根据当前路由的路径来判断当前页面是否高亮选中,但是在刷新页面后,状态会丢失。下面是实现选中状态刷新不消失的完整攻略。

步骤一:路由配置

首先,需要定义好路由配置,这里以vue-router为例。

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('@/views/Home.vue')
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('@/views/About.vue')
  },
  {
    path: '/product',
    name: 'Product',
    component: () => import('@/views/Product.vue')
  },
  // other routes
]

const router = new VueRouter({
  mode: 'history',
  routes
})

export default router

步骤二:导航栏组件

接着,需要定义导航栏组件,这里假设导航栏组件名为NavMenu

<template>
  <div>
    <router-link to="/" :class="{ active: $route.path === '/' }">Home</router-link>
    <router-link to="/about" :class="{ active: $route.path === '/about' }">About</router-link>
    <router-link to="/product" :class="{ active: $route.path === '/product' }">Product</router-link>
    <!-- other links -->
  </div>
</template>

<script>
export default {
  name: 'NavMenu'
}
</script>

<style>
.active {
  /* 导航栏选中状态的样式 */
}
</style>

上面的代码中,router-link标签会渲染成一个超链接,在点击该链接时,会夹带一个to属性值,这个值决定了路由的跳转。:class="{ active: $route.path === '/' }"用来给导航栏设置选中状态的样式。$route.path可以获取当前路由的路径,并与当前导航栏的路径匹配,如果匹配成功,则给该导航栏添加active类名,然后在style标签中定义该类名的样式。

步骤三:vuex存储选中状态

当我们刷新页面后,路由状态会丢失,因此需要通过vuex来存储导航栏选中状态。在store文件夹下创建一个nav.js的文件,代码如下:

const state = {
  // 选中的导航栏路由路径
  activePath: '/'
}

const mutations = {
  setActivePath(state, payload) {
    state.activePath = payload.path
  }
}

export default {
  namespaced: true,
  state,
  mutations
}

步骤四:使用vuex存储选中状态

NavMenu组件中引入vuex,并用mapStatemapMutations来映射vuex中的statemutations

<template>
  <div>
    <router-link to="/" :class="{ active: activePath === '/' }" @click.native="setActivePath('/')">Home</router-link>
    <router-link to="/about" :class="{ active: activePath === '/about' }" @click.native="setActivePath('/about')">About</router-link>
    <router-link to="/product" :class="{ active: activePath === '/product' }" @click.native="setActivePath('/product')">Product</router-link>
    <!-- other links -->
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex'

export default {
  name: 'NavMenu',

  computed: {
    ...mapState({
      activePath: state => state.nav.activePath
    })
  },

  methods: {
    ...mapMutations({
      setActivePath: 'nav/setActivePath'
    })
  }
}
</script>

上面的代码中,当点击导航栏链接时,会调用setActivePath方法,更新vuex中的activePath值。而NavMenu组件中的router-link标签的class属性绑定的是activePath的值,这也就是为什么选中状态刷新不会消失的原因。

示例一:使用keep-alive缓存组件

在实际开发中,某些情况下需要缓存组件状态(比如表单中填写的内容),可以使用keep-alive来缓存组件状态。

App.vue根组件中添加keep-alive标签,这样就可以缓存组件状态,防止刷新后数据丢失。

<template>
  <div id="app">
    <NavMenu />
    <keep-alive>
      <router-view />
    </keep-alive>
  </div>
</template>

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

export default {
  name: 'App',

  components: {
    NavMenu
  }
}
</script>

示例二:使用localStorage存储状态

vuexstore文件夹下再创建一个localStorage.js的文件,代码如下:

const localStoragePlugin = store => {
  store.subscribe((mutation, state) => {
    if (mutation.type === 'nav/setActivePath') {
      localStorage.setItem('activePath', state.nav.activePath)
    }
  })
}

export default localStoragePlugin

上面的代码中,定义了一个localStoragePlugin插件,在vuex中每次调用setActivePath方法时,都会调用localStorage.setItem方法将activePath的值保存到localStorage中。

store文件夹下的index.js文件中,将该插件添加到plugins数组中。

import Vue from 'vue'
import Vuex from 'vuex'
import nav from './nav'
import localStorage from './localStorage'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    nav
  },
  plugins: [
    localStorage
  ]
})

export default store

这样就可以通过localStorage来缓存导航栏选中状态了。

以上就是实现选中状态刷新不消失的完整攻略,当然,可以按照自己的需求进行调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现导航栏效果(选中状态刷新不消失) - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • vue3中如何实现定义全局变量

    在Vue 3中,可以通过创建一个app.config.globalProperties属性来定义全局变量。 具体步骤如下: 在项目中找到main.js文件,创建一个Vue对象,并创建一个名为config的对象: import { createApp } from ‘vue’ import App from ‘./App.vue’ const app = cr…

    Vue 2023年5月28日
    00
  • Vue配置环境变量的正确打开方式

    Vue是一种流行的JavaScript前端框架,它提供了许多强大的功能和工具帮助我们在开发前端应用时更加高效和方便。在Vue开发中,我们通常需要使用一些环境变量来配置不同环境的API地址、端口号、代理设置等等。这篇攻略将会为大家详细介绍在Vue中,如何配置环境变量的正确打开方式。 步骤一:在项目根目录下添加.env文件 首先,我们需要在Vue项目的根目录下添…

    Vue 2023年5月28日
    00
  • vue+element-ui前端使用print-js实现打印功能(可自定义样式)

    让我来为你详细讲解“vue+element-ui前端使用print-js实现打印功能(可自定义样式)”的完整攻略。 简介 在前端开发中,有时需要提供页面的打印功能。本篇攻略将介绍如何使用print-js插件实现可自定义样式的打印功能,使用的前端框架是Vue,UI组件库是Element-UI。 安装依赖 首先,我们需要安装print-js依赖: npm ins…

    Vue 2023年5月28日
    00
  • vue中后端做Excel导出功能返回数据流前端的处理操作

    为了实现Vue中后端做Excel导出功能返回数据流前端的处理操作,我们需要在后端生成Excel文件,并将其返回给前端,前端再将返回的数据流进行处理,以生成Excel文件。具体的步骤如下所述: 后端生成Excel文件 我们可以使用开源的Excel处理库,在后端生成Excel文件。例如,我们可以使用phpspreadsheet这个库来生成Excel文件。首先,需…

    Vue 2023年5月27日
    00
  • Vue项目中实现带参跳转功能

    下面是Vue项目中实现带参跳转功能的完整攻略: 1. 传递参数 1.1 路由方式 我们可以利用 Vue Router 实现带参跳转,先看一下路由文件定义如下: import Vue from ‘vue’ import Router from ‘vue-router’ import Home from ‘@/views/home/Home’ import De…

    Vue 2023年5月27日
    00
  • vue项目中引入js-base64方式

    当我们在Vue项目中需要进行Base64编解码操作时,可以引入js-base64库来完成。下面将提供完整的引入方式以及两个示例说明: 1. 引入js-base64库 首先,我们需要安装js-base64库。在项目根目录下执行以下命令: npm install js-base64 –save 接着,在需要使用Base64的Vue组件或者JS文件中引入该库: …

    Vue 2023年5月28日
    00
  • vue-cli入门之项目结构分析

    vue-cli入门之项目结构分析 1. vue-cli简介 vue-cli是一个vue.js项目脚手架,它可以帮我们快速生成项目骨架,提供了一套完整的项目搭建和工作流解决方案。vue-cli被广泛使用,能够帮助开发者提高开发效率和代码质量。 2. vue-cli的安装 我们可以通过npm安装vue-cli,全局安装后在命令行输入 vue 即可查看vue-cl…

    Vue 2023年5月28日
    00
  • koa2服务端使用jwt进行鉴权及路由权限分发的流程分析

    下面是详细讲解”koa2服务端使用jwt进行鉴权及路由权限分发的流程分析”完整攻略: 什么是 JWT JWT(JSON Web Token)是一个开放标准(RFC 7519),可以使用 JSON 对象在网络上安全地传输信息。JWT 通常被用来在客户端和服务器之间传递身份信息以及其他信息。在用户登录成功后,服务器将 JWT 作为身份认证的令牌返回给客户端,客户…

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