vue-router

改变url但是页面不刷新

1,通过hash改变,不会刷新

location.hash=''

在这里插入图片描述
在这里插入图片描述
2,通过history对象

history.pushState({},'','url')

在这里插入图片描述
在这里插入图片描述
这种方式其实利用了栈结构,push为入栈,要出栈,使用history.back()方法

3,通过history对象的replaceState()方法
这个方法的效果跟上面的方法的效果一模一样,但是它是无法返回的。

4,history.go()
go只能在pushState中使用,因为它是要在栈中跳的。
它的参数可正可负,如果是正的,那么就是向前走。如果是负的,那么就是往回走

history.back()==history.go(-1)
history.forward==histoey,go(1)

history.forward()向前走

认识vue-router

目前前端流行的三大框架,都有自己的路由实现
Angular的ngRouter
React的ReactRouter
Vue的vue-router

vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用
官方网站:https://router.vuejs.org/zh/

vue-router是基于路由和组件的
路由用于设定访问路径,将路径和组件映射起来
在vue-router的单页面应用中,页面的路径的改变就是组件的切换

安装和使用vue-router

1,安装:
npm install vue-router
2,在模块化工程中使用它(因为是一个插件,所以可以通过vue.use()来安装路由功能)
2.1:导入路由对象,并且调用Vue.use(VueRouter)
2.2:创建路由实例,并且传入路由映射配置
2.3:在Vue实例中挂载创建的路由实例

3
3.1在src下创建目录router

在这里插入图片描述
在创建index.js

// 配置路由相关的信息
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
//1,通过vue.use(插件)。安装插件
Vue.use(Router)
//2.创建路由对象
export default new Router({
  // 配置路由和组件之间的应用关系
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})

//将对象传入到Vue实例中--导出

接着在main.js中使用:

import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

使用vue-router的步骤:
第一步:创建路由组件
在这里插入图片描述

第二步:配置路由映射:组件和路径映射关系
在这里插入图片描述
记得要导入:
在这里插入图片描述

第三步:使用路由:通过和
:该标签是一个vue-router中已经内置的组件,它会被渲染成一个标签
:该标签会根据当前的路径,动态渲染出不用的组件。
网页的其他内容,比如顶部的标题/导航,或者底部的一些版权信息等会和处于同一个等级
在路由切换时,切换的是挂载的组件,其他内容不会发生改变
决定你的组件是什么时候显示的关键。
所以想要标签来识别各自的路径
在App.vue才能写标签
在这里插入图片描述

结果:
在这里插入图片描述
但是点击链接之后,还是不能跳转页面:
在这里插入图片描述
所以想要router-view来告诉组件应该渲染什么,怎么渲染。

路由的默认路径

这里还有一个不太好的实现,默认情况下,进入网站的首页,我们希望渲染首页的内容,但是我们的实现中,默认没有显示首页组件,必须让用户点击才可以。
任何可以让路径默认跳转到首页,并且渲染首页组件呢?
非常简单:我们只需配置多一个映射就可以了
在这里插入图片描述

配置解析:
我们在routes中又配置了一个映射,
path配置的是根路径:/(加不加/都可以)
redirect是重定向,也就是我们将根路径重定向到/home的路径下,这样就可以得到我们想要的结果了

接着我们发现,路径的改变都是通过哈希算法:
在这里插入图片描述

带有井号。默认情况下,就是哈希模式。但是想要用html5的history,在配置路由的时候就说明:
在这里插入图片描述
效果:
在这里插入图片描述
route-link补充属性:
1,to——用于指定跳转的路径
2,tag——可以指定之后渲染成什么组件,比如如下会被渲染成一个元素,而不是
在这里插入图片描述

3,replace:replace不会留下history记录,所以指定replace的情况下,后退键返回不能返回到上一个页面中
4,active-class:当对应的路由匹配成功时,会自动给当前元素设置一个router-link-active的class,设置active-class可以修改默认的名称。
在进行高亮显示的导航菜单或者底部tabbar时,会使用到该类
但是通常不会修改类的属性,会直接使用默认的router-link-active

如果要改变这个类的名字,可以添加属性:active-class,后面接上名字就可以。
在这里插入图片描述
但是想要每一个被点击的都要添加这个属性,很麻烦
但是可以在路由里面修改这个类名:
在这里插入图片描述
这样不用在原来的代码中添加这个类了。
在这里插入图片描述

通过代码修改路径:

路由代码跳转

<template>
  <div id="app">
   
    <button @click="homeClick">首页</button>
    <button @click="aboutClick">关于</button>
    <router-view></router-view>
  </div>
</template>
<script>
export default {
  name: "App",
  methods: {
    homeClick() {
      // 通过代码的方式修改路径,vue-router
      this.$router.push("/home");
      console.log("homeClick");
    },
    aboutClick() {
      this.$router.push("/about");
      console.log("aboutClick");
    },
  },
};
</script>

$router来自vue-router的源码。在所有的组件都加了router属性,调动这个属性的push方法。
但是我的页面会报错:
在这里插入图片描述
虽然可以正常运行,但是找了一下资料,
提示的是:避免到当前位置的冗余导航。也就是重复触发了同一个路由。
解决方法:只需要在router /index的页面里面 加入
在这里插入图片描述
结果:
在这里插入图片描述
没有再报错。

如果不想要用push,还可以用replace。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值