vue-router路由使用

1、路由的安装

  1. 首先安装
npm install i vue-router --save
  1. 在main.js中引入。
    我们一般把router相关的内容写到一个单独的router文件夹中便于管理,然后再在main.js中引入这个文件。
    在new Vue时传入
import router from './router'
。。。
new Vue({router ,。。。})
  1. router文件夹的index.js文件
    引入,并用Vue.use注册插件
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

定义路由routes 数组

const routes = [
  {
    path: '/',
    redirect: '/login'
  },
  。。。]

创建router实例
最后暴露出去,在main.js中引入。

const router = new VueRouter({
  routes
})
export default router

在组件内使用留坑。

2、路由的跳转

  • 1、通过点击router-link标签
<router-link to='/goods'>

注:在router-link标签中的点击事件,需要添加.native修饰符,否则只会跳转,不会触发事件。

  • 2、通过push方法
this.$router.push("/goods");

3、路由跳转时的传参

1、方法一

// 路由定义
{
  path: '/describe/:id',
  name: 'Describe',
  component: Describe
}
// 页面传参
this.$router.push({
  path: `/describe/${id}`,
})
// 页面获取
this.$route.params.id

2、方法二

// 路由定义
{
  path: '/describe',
  name: 'Describe',
  omponent: Describe
}
// 页面传参
this.$router.push({
  name: 'Describe',
  params: {
    id: id
  }
})
// 页面获取
this.$route.params.id

3、方法三

push时使用path的话,就不能使用params,只能使用query传参

// 路由定义
{
  path: '/describe',
  name: 'Describe',
  component: Describe
}
// 页面传参
this.$router.push({
  path: '/describe',
    query: {
      id: id
  `}
)
// 页面获取
this.$route.query.id

方法二参数不会拼接在路由后面,页面刷新参数会丢失
方法一和三参数拼接在后面,丑,而且暴露了信息。

4、$route和$router的区别

1、 $route是‘路由信息对象’

包括path,params、hash、query、fullPath、matched、name等路由信息参数

  • path 当前路由的路径
  • params 路由参数
  • query url查询参数
  • hash 当前路由的哈希值
  • fullPath 当前路由的url,包含查询参数和hash的完整路径
  • name 当前路由的名字

2、$router是路由实例对象

使用new VueRouter创建的实例。包含一些方法

  • this.$router.go(-1) 跳转到上一页

  • this.$router.push(‘/menu’) 跳转到指定路由

  • this.$router.push({name:‘menu’}) 通过名字跳转

  • this.$router.replace(‘/menu’)

  • this.$router.replace({name:‘menu’})
    使用replace的话,不会添加一条新的记录

5、导航守卫

导航守卫:通过跳转时对跳转给予放行还是不放行,实现对导航的守卫。

1、*全局前置守卫beforeEach

可以在项目内创建多个全局前置守卫
这个是常使用的

router.beforeEach((to,from,next)=>{
  if(to.path==="/login"){
    next();
    return;
  }
  // 获取token
  const token=window.sessionStorage.getItem("token");
  if(!token){
    next('/login');
    return;
  }else{
    next();
  }
})

在守卫中,

  • to 将要进入的目标路由对象
  • from 当前正要离开的路由
  • next 一定要调用next方法,
    next(false)中断当前的导航

2、全局后置钩子afterEach

可以创建多个全局后置钩子
不接受next函数,不会改变导航本身。
router.afterEach

3、beforeResolve全局解析守卫

可以创建多个

4、路由独享守卫

不可以创建多个
卸载路由配置数组项中,有next

5、beforeRouteEnter组件内的守卫

在组件内定义的路由导航守卫,(定义在created钩子同级的位置)

 beforeRouterEnter(to,from,next){
    next((vm)=>{

    })
  },

是支持给next传递回调的唯一守卫,回调的参数是当前vue实例。
在beforeRouterEnter中,不可以使用this来访问当前vue实例。
在组件创建时,不仅执行created钩子,也会执行beforeRouteEnter。

6、beforeRouteUpdate

在当前路由改变,但是该组件被复用时调用(嵌套组件的情况),在导航内可以访问this

7、beforeRouteLeave

导航离开该组件的对应路由时调用
这个离开守卫可以用来禁止用户在还未保存修改前离开。
该导航可以通过next(false)来取消导航。

6、命名路由

7、hash模式和history模式

1、hash模式

window对象提供了hashchange事件来监听hash值的改变,一旦url中的hash值发生改变,便触发该事件。
通过对location.hash赋值可以改变hash

2、history模式

HTML5中 History API提供,在不刷新整个页面的情况下修改站点的url,window对象提供了popstate事件来监听历史栈的改变,一旦历史栈的信息发生改变,就触发该事件。
但是调用history.pushState和history.replaceState方法不会触发该事件,只有在做出浏览器动作时才触发该事件。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值