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

yizhihongxing

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日

相关文章

  • vue实现登录时图形验证码

    下面是Vue实现登录时图形验证码的完整攻略。 1. 简介 在网站的登录界面中,为了增加用户的安全性,通常会使用图形验证码来防止机器恶意登录或者验证码破解等安全问题。Vue作为现代前端框架,可以很方便地实现图形验证码。 2. 实现步骤 2.1 安装v-charts插件 在Vue项目中使用图形验证码需要使用v-charts插件,因此需要先安装v-charts插件…

    Vue 2023年5月29日
    00
  • 创建和运行Vue.js项目方法demo

    让我们来讲解如何创建和运行Vue.js项目。下面是完整攻略: 1. 安装 Node.js 安装Vue.js需要先安装Node.js。Node.js可以在Node.js官网上进行下载安装。选择相应平台的安装包进行下载,并按照提示进行安装。 安装完成后,可以在命令行中输入node -v和npm -v查看Node.js和npm的版本号,确认安装成功。 2. 创建V…

    Vue 2023年5月27日
    00
  • vue作用域插槽详解、slot、v-slot、slot-scope

    作用域插槽是Vue组件系统中非常重要的一个概念,它使得组件的嵌套变得更加灵活,可以方便地实现组件之间的数据交流。本文将详细讲解Vue中的作用域插槽,包括slot、v-slot、slot-scope及其使用方法,并且提供两个实例说明。 1. slot和v-slot简介 在Vue中,我们可以通过slot来定义组件模板的插槽,然后在父组件中通过一些内容填充的方式来…

    Vue 2023年5月28日
    00
  • 基于Vue+Openlayer实现动态加载geojson的方法

    当我们需要在地图上展示大批量地理信息时,我们通常会选择使用地图开发库OpenLayers。OpenLayers是一款开源的JavaScript地图开发库,拥有众多强大的地图展示和操作功能。而在使用Vue.js与OpenLayers相结合的过程中,我们就可以在地图上动态加载geojson数据,实现非常炫酷的地图数据展示效果。以下是详细讲解基于Vue.js和Op…

    Vue 2023年5月28日
    00
  • 通过源码分析Vue的双向数据绑定详解

    作为网站的作者,我非常乐意为大家讲解“通过源码分析Vue的双向数据绑定详解”的完整攻略。下面将详细介绍这个过程。 什么是双向数据绑定 简单来说,双向数据绑定是指数据的变化能够在视图中自动反映出来,同时视图中的变化也能够自动同步到数据中去,即数据和视图之间的双向绑定。在Vue中,双向数据绑定是由v-model指令来实现的。 Vue中双向数据绑定的实现原理 Vu…

    Vue 2023年5月28日
    00
  • vue中计算属性和方法的区别及说明

    Vue中计算属性和方法是两种常用的方式来处理数据的操作和计算。它们有不同的特点和用途,下面就具体说一下它们在使用中的区别及说明。 计算属性 计算属性是Vue中用于动态计算和返回结果的属性。计算属性会根据响应式数据的变化自动更新计算结果。计算属性有以下几个特点: 计算属性会缓存计算结果,只有在响应式数据发生变化时才会重新计算。这种缓存主要是为了避免重复计算和提…

    Vue 2023年5月27日
    00
  • 深入浅析Vue中的Prop

    深入浅析Vue中的Prop 1. 什么是Prop Prop(属性)是Vue中组件间通信的一种方式,它是父组件向子组件传递数据的一种方式。使用Prop,我们可以将父组件中的数据使用属性的形式传递给子组件使用。 2. Prop的使用 2.1. 在子组件中声明和使用Prop: 在子组件中一般使用props选项声明要接收的数据,接收到的数据会作为子组件的一个属性,可…

    Vue 2023年5月28日
    00
  • Vue如何清空对象

    Vue清空对象的方法有很多,下面将介绍其中两个常用的方法。 方法一:使用Vue.set方法 Vue.set方法可以在Vue实例中添加或修改对象的某个属性,也可以将某个属性从对象中删除。当将该属性的值设为null时,对象就被清空。 示例代码如下: <template> <div> <div>原对象:{{ obj }}<…

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