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日

相关文章

  • Vue this.$router.push(参数)实现页面跳转操作

    当我们使用Vue.js构建单页面应用时,有时需要在不同的页面之间进行路由跳转。Vue Router提供了一些方法来实现这一功能,其中之一是$this.$router.push()方法。以下是关于如何使用$this.$router.push()方法实现页面跳转操作的完整攻略。 前置准备 要使用Vue Router,需先安装Vue Router模块并配置路由。 …

    Vue 2023年5月27日
    00
  • 仿vue-cli搭建属于自己的脚手架的方法步骤

    下面是我为您准备的详细步骤: 1. 初始化项目 首先,我们需要创建一个空的项目文件夹,然后进入该文件夹,使用以下命令进行初始化: npm init -y 该命令会生成一个 package.json 文件,其中包含了项目的基本描述和依赖信息。 2. 添加依赖 接着,我们需要添加一些必要的依赖,包括: commander:用于解析命令行参数 inquirer:用…

    Vue 2023年5月28日
    00
  • Vue 自定义指令功能完整实例

    下面我将详细介绍“Vue自定义指令功能完整实例”的攻略。 一、Vue自定义指令简介 Vue中,我们可以自定义指令来增强视图层的交互能力。通过自定义指令,我们可以封装常用的DOM操作,让其可重用,并且能在模板中直接使用。常见的指令,如v-model、v-show、v-for、v-bind和v-on都是Vue自带的指令。而Vue自定义指令就是用户自己定义一些新的…

    Vue 2023年5月27日
    00
  • 多个vue项目实现共用一个node-modules文件夹

    实现多个Vue项目共用一个node_modules文件夹可以通过以下步骤: 将node_modules文件夹移动到一个独立的位置,并确保该位置对所有项目都可访问。例如,在你的根目录下创建一个名为shared的文件夹,并将node_modules文件夹移动到该文件夹中。 在每个项目的根目录下都创建一个名为node_modules的符号链接,并将其指向上述位置的…

    Vue 2023年5月28日
    00
  • Vue项目中打包优化的四种方法详解

    Vue项目中打包优化的四种方法详解 Vue是一个流行的JavaScript前端框架,它拥有易学易用、功能强大的特点,可以帮助开发者快速构建高效的Web应用程序。然而,在较大的Vue项目中,应用程序的文件大小和加载时间可能会成为问题。在本文中,我们将介绍四种Vue项目中打包优化的方法,以减少应用程序的加载时间和文件大小。 方法1:使用CDN 使用CDN(内容分…

    Vue 2023年5月27日
    00
  • 解决vue字符串换行问题(绝对管用)

    下面是解决Vue字符串换行问题的完整攻略: 问题描述 在Vue中,我们经常需要根据模板动态生成字符串。当字符串中需要包含多个换行符时,可以使用\n或者<br>来实现。但是如果我们将这个字符串直接放在模板中时,会发现换行符并没有起作用,而是直接输出了\n或者<br>这些字符。因此,我们需要一种方法来解决这个问题。 解决方案 在Vue中,…

    Vue 2023年5月27日
    00
  • 谈谈VUE种methods watch和compute的区别和联系

    下面我将详细讲解“谈谈VUE中methods、watch和computed的区别和联系”的完整攻略。 什么是methods、watch和computed methods、watch、computed这三个概念都是Vue中比较重要的内容,它们都是Vue实例中用于处理数据的方法。 methods methods即“方法”,是Vue实例中专门用于定义方法的选项。我…

    Vue 2023年5月28日
    00
  • Ant design vue中的联动选择取消操作

    Ant Design Vue中提供了一种很方便的方法实现联动选择和取消操作。这种方法主要是基于Checkbox.Group和Checkbox组件。接下来我们详细讲解如何实现这种联动选择和取消操作。 步骤: 1. 创建一个Checkbox.Group组件和几个Checkbox组件。 示例代码: <template> <div> <…

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