nuxt添加.html,Nuxt内导航栏的两种实现方式

方式一 | 通过嵌套路由实现

在pages页面根据nuxt的路由规则,建立页面

1. 创建文件目录及文件

3d724b05d4aeee83cc78242cbbca69ae.png

根据规则,如果要创建子路由,子路由的文件夹名字,必须和父路由名字相同

所以,我们的文件夹也为index,index文件夹需要一个默认的页面不然nuxt的路由规则就不能正确匹配页面

一级路由是根路由

二级路由是index,user,默认进入index路由

下面是router页面自动生成的路由

{

path: "/",

component: _93624e48,

children: [{

path: "",

component: _7ba30c26,

name: "index"

}, {

path: "user",

component: _6934afa7,

name: "index-user"

}]

}

2. html页面增加nutx-child配合子路由跳转

nuxt-demo

// 直接访问路由

// 通过push的方式直接访问路由路径

// 通过push的方式,同时用对象的方式访问路由

首页

用户详情

// nuxt规定的子路由插槽

这里就拿官方demo改了一下,可以看到,切换路由的时候,只有子路由页面是变换的,父路由部分是没有变换的

8004a331bb60c23814329be1a475d1ee.gif

方式二 | 创建公共组件实现

这个方法是需要用到vuex的,当然了,如果嫌麻烦,用storage也行

在components内创建公共组件

1.在pages文件夹创建页面,一个主页,一个用户页面,一个活动页面

647df28dabe19957393956f99bd6ddf0.png

创建页面的过程就不一一细说了,具体就是文件夹下面一个index.vue,router就会读这个index为路由指定的页面

我们看下.nuxt文件夹下面的router.js页面

e1fc66342751aad3cdfce226bd8ca400.png

这就是建立好的路由

2. 创建公共组件

704cebc9953999da8788bfcd5aaca66b.png

这里偷个懒,用的element的导航栏组件

3. 在所有路由页面导入创建的公共组件

nuxt-demo

import Logo from '~/components/Logo.vue'

import navBar from '~/components/nav.vue'

export default {

components: {

Logo,

navBar

}

}

这样就完成了第一步,我们看下预览

816ac358568e0dba62f908d919a6b88b.gif

问题出现了,虽然我们的路由变换了,但是导航栏的状态确没有同步,因为路由跳转的时候,组件状态会刷新,所以这个时候,需要共享状态,所以,我这里用的是vuex

4. 使用vuex同步导航栏状态

直接在store文件夹内进行添加就行,nuxt里推荐的两种vuex使用方法

第一种是普通创建

a89f6b886f8e1dfc9db09273d25c4e22.png

第二种是模块化创建

abfc42b85832423517d5277b69dd64d5.png

这里我选的是第二种方式,我也建议使用这种,因为方便维护,各种状态一目了然

我们看下目录结构,这里和在vue使用的vuex目录是一样的

363c1476ef34168af6041904c31c8d0a.png

这里就不一一详细说明每个文件内容了,本次重点是使用vuex来同步状态

我们把状态同步到vuex中,这样每次页面进来的时候,直接读取vuex中的数据,就可以同步导航栏状态栏了

4.1 vuex使用报错

store/index.js should export a method that returns a Vuex

instance.vuex在nuxt中是需要导出一个store实例

我们这里需要改动一下store文件下的index页面

652a1daabfe5ddbb103969a0620d6ea4.png

我们继续回到导航栏组件内

首页

用户页面

活动页面

import {mapGetters, mapMutations} from 'vuex'

export default{

data() {

return {

activeIndex: '1',

activeIndex2: '1'

};

},

computed: {

...mapGetters([

'barIndex'

])

},

methods: {

...mapMutations({

'change_index': 'CHANGE_INDEX'

}),

handleSelect(key, keyPath) {

console.log(key, keyPath);

this.activeIndex = key

// 每次切换导航栏,会把当前状态同步到vuex中

this.change_index(this.activeIndex)

}

},

created() {

if (this.barIndex) { // 判断vuex内是否有上一次存储的数据,有就同步到当前状态

this.activeIndex = this.barIndex

}

console.log('vuex', this.activeIndex)

}

}

这样,我们就已经可以同步导航栏状态了

992c3a83a546b1a5af0742138ac1643a.gif

如果有更好的方式,希望大牛们在评论区不吝赐教

来源:oschina

链接:https://my.oschina.net/u/4349795/blog/3236765

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nuxt.js是一个基于Vue.js的通用应用框架,可以快速构建单页应用和静态网站。它帮助我们在开发过程中进行代码分离、优化性能和部署网站等方面提供了很多便利。 在默认情况下,Nuxt.js使用的是Vue Router进行路由管理,并且路由地址都是没有后缀的,即不带有.html后缀。这是为了在构建出的静态网站中提供更友好的URL形式,提高搜索引擎优化(SEO)的效果。 如果你想要在Nuxt.js的路由地址中添加.html后缀,可以通过自定义路由配置的方式实现。首先,在你的Nuxt.js项目根目录下新建一个`router.js`文件(如果该文件已存在则跳过此步骤)。 然后,打开 `nuxt.config.js` 文件,在 `router` 配置项中加入一行代码 `router: { middleware: 'router' }`。这样,就可以将自定义的路由配置应用到项目中。 在 `router.js` 文件中,你可以使用 Vue Router 的语法来定义路由。在需要添加.html后缀的路由地址上,可以通过 `alias` 字段进行指定。例如: ```javascript import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export function createRouter() { return new Router({ mode: 'history', routes: [ { path: '/home', alias: '/home.html', component: () => import('~/pages/Home.vue') }, // 其他路由配置... ] }) } ``` 在上述代码中,`alias` 字段指定了 `/home` 路由地址的别名为 `/home.html`。当用户访问 `/home.html` 时,会显示对应的页面内容。 这样,你就可以通过自定义路由配置,将Nuxt.js的路由地址添加.html后缀啦!请注意,添加.html后缀可能会影响到默认的Nuxt.js路由功能,所以要根据你的具体需求来决定是否使用该方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值