坑的背景介绍

要用 bootstrap-vue 这个vue的ui框架来重构公司的官网,因为公司官网之前使用bootstrap搭建的,现在想用nuxt框架来重构,恰好bootstrap出了结合vue的版本,故此毫不犹豫选择了bootstrap-vue这个ui框架,在做到导航部分(如图1)的时候,问题出现了,无法动态切换active,即那个蓝色的背景

部分代码如下

<b-navbar-nav class="ml-auto"><b-nav-item class="active"  href="/">首页</b-nav-item><b-nav-item  href="/companyProfile">企业概况</b-nav-item><b-nav-item  href="/news">新闻中心</b-nav-item><b-nav-item  href="/productShow">产品展示</b-nav-item><b-nav-item  href="/healthy">肽与健康</b-nav-item><b-nav-item  href="/contact">联系我们</b-nav-item>
</b-navbar-nav>
复制代码

后来想到的办法是设置一个变量show的值,当show等于1,则在首页的部分添加class="active",同理show=2时,在企业概况的部分添加class="active",代码如下

<b-navbar-nav class="ml-auto"><b-nav-item :class="{active:show==1}" @click="selectIndex()" href="/">首页</b-nav-item><b-nav-item :class="{active:show==2}" @click="selectCompanyProfile()" href="/companyProfile">企业概况</b-nav-item><b-nav-item :class="{active:show==3}" @click="selectNews()" href="/news">新闻中心</b-nav-item><b-nav-item :class="{active:show==4}" @click="selectProductShow()" href="/productShow">产品展示</b-nav-item><b-nav-item :class="{active:show==5}" @click="selectHealthy()" href="/healthy">肽与健康</b-nav-item><b-nav-item :class="{active:show==6}" @click="selectContact()" href="/contact">联系我们</b-nav-item>
</b-navbar-nav>export default {data(){return{show:1}},methods:{selectIndex(){this.show = 1},selectCompanyProfile(){this.show = 2},//等等,不一一写了}
}
复制代码

然而并未实现想像中动态添加的active的效果,原因是页面发生了跳转,重载了这个导航组件,所以show会一直是1,active永远在首页上。那么在当前页面上进行改变show的值就失败了,故此引入今天要说的嘉宾---Vuex

在nuxt中使用vuex跟传统在vue中使用vuex还不太一样,首先nuxt已经集成了vuex,不需要我们进行二次安装,直接引用就好,在默认nuxt的框架模板下有一个store的文件夹,就是我们用来存放vuex的地方

Nuxt.js 支持两种使用 store 的方式:

普通方式:store/index.js 返回一个 Vuex.Store 实例
模块方式:store 目录下的每个 .js 文件会被转换成为状态树指定命名的子模块 (当然,index 是根模块,相当于设置了namespaced: true)
复制代码

Nuxt.js提供了模块方式的简单写法:使用状态树模块化的方式,store/index.js 不需要返回 Vuex.Store 实例,直接将 state、mutations 和 actions 暴露出来即可。

我写的项目红没有把state暴露出来,当然,你们可以暴露来,我在store文件夹下创建了3个文件,分别是index.js,mutations.js和actions.js,其中index.js的内容是

import Vuex from 'vuex'import mutations from './mutations'
import actions from './actions'export default () => {return new Vuex.Store({state: {show: 1},mutations,actions})
}
复制代码

mutations.js的内容是

export default {selectIndex(state) {state.show = 1},selectCompanyProfile(state) {state.show = 2},selectNews(state) {state.show = 3},selectProductShow(state) {state.show = 4},selectHealthy(state) {state.show = 5},selectContact(state) {state.show = 6}
}
复制代码

在导航的部分我没有涉及到action的操作,故此action的内容暂不做展示。

在index.js的部分我设置了show的默认值为1,mutations.js的部分我写了很多等待调用的方法。

下面vue的页面要获取vuex存储的show的值,并调用方法,代码为

<b-navbar-nav class="ml-auto"><b-nav-item :class="{active:$store.state.show==1}" @click="selectIndex()">首页</b-nav-item><b-nav-item :class="{active:$store.state.show==2}" @click="selectCompanyProfile()" >企业概况</b-nav-item><b-nav-item :class="{active:$store.state.show==3}" @click="selectNews()">新闻中心</b-nav-item><b-nav-item :class="{active:$store.state.show==4}" @click="selectProductShow()">产品展示</b-nav-item><b-nav-item :class="{active:$store.state.show==5}" @click="selectHealthy()">肽与健康</b-nav-item><b-nav-item :class="{active:$store.state.show==6}" @click="selectContact()">联我们</b-nav-item></b-navbar-nav>import {mapState, mapMutations} from 'vuex'export default {data(){return{}},methods:{// 导航切换selectIndex(){this.$store.commit('selectIndex')this.$router.push('/')},selectCompanyProfile(){this.$store.commit('selectCompanyProfile')this.$router.push('/companyProfile')},selectNews(){this.$store.commit('selectNews')this.$router.push('/news')},selectProductShow(){this.$store.commit('selectProductShow')this.$router.push('/productShow')},selectHealthy(){this.$store.commit('selectHealthy')this.$router.push('/healthy')},selectContact(){this.$store.commit('selectContact')this.$router.push('/contact')},// 导航切换部分结束}}
复制代码

不知道大家注意到没有我把之前的 href 链接给去掉了,而是换成了点击事件,因为如果我依然用 href 链接,并且click方法里面直接调用

this.$store.commit('selectIndex')
复制代码

当我点击企业概况,正常情况下页面发生跳转,且show的值变为2,蓝色背景也转移到企业概况上去,但事实上页面发生跳转时,vuex里show的值会先变成2然后又变回1,页面跳转了,但active依然没有添加对,当我去掉 href 后,改用click点击跳转就成功了,这个大家可以尝试一下,具体原因我也不太清除,如果有大神知道恳请告知。

反正利用vuex来达到导航栏active的切换跌跌撞撞一上午总算从坑里爬出来了,大家也应该能看的出来啊,我的语言组织能力不是很好,但我真的用力在把我的爬坑过程给大家介绍一下,二来也是记录一下我码代码的这么一个过程,我是很喜欢交朋友的,如果你对于这篇文章看不太懂,如果你目前在学习nuxt或者vue的过程中有什么问题或疑惑,都可以留言或者跟我私信,我是很乐意回答你的,虽然本人也很菜鸟,但可以一起学习一起进步嘛,啊哈哈哈!!!

就酱。

转载于:https://juejin.im/post/5b0d1aa96fb9a00a0a4d5e9e

Nuxt爬坑系列之vuex相关推荐

  1. vuex modules ajax,VUE项目爬坑---6、vuex的真正存在的意义是什么

    VUE项目爬坑---6.vuex的真正存在的意义是什么 一.总结 一句话总结: a.[避免低效的数据传递]:当多个组件嵌套的时候,只能父子传递,那么中间的组件只能做传递数据之用,数据不是它用,它却传递 ...

  2. 爬坑系列----Redis查询key报空指针异常,而redis中确实存在该key

    爬坑系列----Redis查询key报空指针异常,而redis中确实存在该key 参考文章: (1)爬坑系列----Redis查询key报空指针异常,而redis中确实存在该key (2)https: ...

  3. 萌新爬坑系列-时间戳转换年月日

    萌新爬坑系列-时间戳转换年月日 时间戳转换年月日 本人小萌新一个,毕业不久,入行前端也不久,摸索着写点东西,也当是自己爬坑的一个记录吧. 最近从后台接受了一组时间数据,需要转换成年月日来显示,所以把自 ...

  4. 萌新爬坑系列-百度小程序自定义组件

    萌新爬坑系列-百度小程序自定义组件 百度小程序自定义组件的一个小问题 本人小萌新一个,毕业不久,入行前端也不久,摸索着写点东西,也当是自己爬坑的一个记录吧. 最近做了微信小程序,转百度小程序简直痛不欲 ...

  5. [小明爬坑系列]AssetBundle原理介绍

    一.简介 Assetbundle 是Unity Pro提供提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法使用起来很便利. 二.移动平台特点 A ...

  6. Nuxt(安装部署)爬坑指南

    Nuxt.js使用详细说明 这篇文章主要向大家介绍Nuxt爬坑,主要内容包括基础应用.实用技巧.原理机制等方面,希望对大家有所帮助. https://www.shangmayuan.com/a/dcd ...

  7. Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...

  8. 全局安装nuxt_Nuxt爬坑

    nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作SSR(服务器端渲染).Vue.js是开发SPA(单页应用)的,Nuxt.js这个框架,用Vue开发多页应用,并在服务端完成渲染,可以 ...

  9. 03、Swagger2和Springmvc整合详细记录(爬坑记录)

    时间 内容 备注 2018年6月18日 基本使用 spirngmvc整合swagger2 开始之前这个系列博文基本是,在项目的使用中一些模块的内容记录,但是后期逐渐优化,不单单是整合内容. swagg ...

最新文章

  1. SVN被锁定的几种解决方法
  2. android系统源代码添加新产品的支持
  3. Mysql迁移到Postgresql
  4. 打算尝试瑜伽,看是否能解决长期困扰的胃痛问题
  5. DL之LSTM:基于《wonderland爱丽丝梦游仙境记》小说数据集利用LSTM算法(层加深,基于keras)对单个character字符预测
  6. 操作系统(十一)线程的概念和特点
  7. redis linux安装配置,linux下安装配置单点redis
  8. 洛谷 P3383 【模板】线性筛素数
  9. Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
  10. 大四实习有点晚[转载]
  11. gitlab 删除分支_初识gitlab工作流
  12. Redis Cluster集群模式
  13. BZOJ1010 [HNOI2008]玩具装箱
  14. 呼叫 :邓伦粉丝!手机桌面壁纸来喽
  15. java mysql_num_rows_JAVA MYSQL sql_calc_found_rows和found_rows()实践
  16. Spring Cloud(Greenwich版)-05-Spring Cloud集成Ribbon(客户端负载均衡组件)
  17. cmd查看当前python安装路径_python环境配置
  18. cad迷你看图免费版|cad迷你看图电脑版免费版下载 v2019R8
  19. CASA方法估算NPP(IDL+ENVI)
  20. 云计算、计算虚拟化、网络基础简介

热门文章

  1. 将数据库改为使用登录名密码登陆
  2. lintcode 中等题:subSets 子集
  3. 利用iconv进行文件编码批量原地转换
  4. php使用第三方登录
  5. SQL Server 2005 数据库邮件 使用要点
  6. Linux扩展SWAP分区
  7. 福州大学计算机专业排名2018,软科2018年世界一流学科排名发布 福州大学9个学科上榜...
  8. 【数字信号处理】傅里叶变换性质 ( 傅里叶变换频移性质示例 )
  9. 【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )
  10. 【错误记录】Android Studio 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包动态库的 CPU 架构 )