路由是根据不同的url地址展现不同的内容或页面。

前端路由就是把不同路由对应不同的内容或页面的任务交给前端来做(在单页面应用,大部分页面结构不变,只改变部分内容的使用),之前是通过服务器根据url的不同返回不同的页面。

前端路由优点:用户体验好,不需要每次都从服务器全部获取,快速展现给用户

缺点:不利于SEO,使用浏览器的前进后退会重新发送请求,没有合理地利用缓存,无法记住之前的滚动条

  • vue-router用来构建SPA(单页面应用)
  • <router-link></router-link>或者this.$router.push({path:""}) 路由跳转的链接
  • <router-view></router-view>

vue-router就是对history的封装

获取地址参数

$route.params.id 命名的路由,'/goods/:id'

$route.query.id 带查询参数带查询参数,'/goods?id=123'

动态路由

export default new Router({
mode:'history',//路由模式。默认是hash,地址后面跟#;history是主流方式,更加真实
saveScrollPosition:true,//保存滚动条位置
routes: [
{
path: '/goods/:id/user/:name',
name: 'Hello',
component: GoodList
}
]
}) <p>{{$route.params.id}}</p>
<p>{{$route.params.name}}</p>

路由嵌套

routes: [
{
path: '/goods',
name: 'GoodList',
component: GoodList,
children:[
{
// 当 /goods/title匹配成功
// Title 会被渲染在 GoodList 的 <router-view> 中
path:'title',//不需要/
component:Title
},
{
path:'image',
component:Image
}
]
}
] <router-link to="/goods/title">显示标题</router-link><!-- 链接到一个路由 -->
<router-link to="/goods/image">显示图片</router-link>
<router-view></router-view>

编程式路由

通过js来实现页面的跳转

// 字符串
$router.push('name')
//对象
$router.push({path:'name'})
//命名的路由
$router.push({ name: 'user', params: { userId: 123 }})
//带查询参数,变成 /name?a=123
$router.push({path:'name?a=123'}) 或者 $router.push({path:'name',query:'a=123'}) $router.go('-1') 相当于history()

如果提供了 pathparams 会被忽略

const userId = 123
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }})

命名视图

<router-view></router-view>
<router-view name="a"></router-view>
<router-view name="b"></router-view> const router = new VueRouter({
routes: [
{
path: '/',
components: {
default: Foo,
a: Bar,
b: Baz
}
}
]
})

路由懒加载

//import Home from '@/page/home'
const Home = resolve => require(['@/page/Home'], resolve) routes: [
{
path: '/',
components:Home,
}
] component: (resolve) => {
require(['@/views/Cart'], resolve)
}

路由拦截

const router = new Router({
mode: 'history',
routes: [
{
path: '/cart',
name: 'Cart',
// 需要登录才能进入的页面可以增加一个meta属性
meta: {//路由元信息
requireAuth: true
},
component: (resolve) => {
require(['@/views/Cart'], resolve)
}
},
]
}) // 判断是否需要登录权限 以及是否登录
router.beforeEach((to, from, next) => {//全局守卫
if (to.matched.some(record => record.meta.requireAuth)) {// 判断是否需要登录权限
if (router.app.$options.store.state.nickName!=='') {// 判断是否登录,在server/app.js设置了全局拦截,未登录status=1001
next()
} else {// 没登录则跳转到登录界面
next({
path: '/',
query: {redirect: to.fullPath}//?redirect=%2Fcart
})
router.app.$options.store.commit('updataLoginModalFlag',true);
}
} else {
next()
}
})

动态添加路由

indexUrl='/service-center';
router.addRoutes([{
path: '/',
redirect: indexUrl,
name:'Index'
}])

3. Vue-router 路由的更多相关文章

  1. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

  2. Vue系列:Vue Router 路由梳理

    Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参数. ...

  3. 04 Vue Router路由管理器

    路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成 ...

  4. Vue Router路由管理器介绍

    参考博客:https://www.cnblogs.com/avon/p/5943008.html 安装介绍:Vue Router 版本说明 对于 TypeScript 用户来说,vue-router@ ...

  5. Vue Router 路由守卫:完整的导航解析流程

    完整的导航解析流程 1 导航被触发. 2 在失活的组件里调用离开守卫. 3 调用全局的 beforeEach 守卫. 4 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+). ...

  6. Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转

    问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...

  7. Vue Router 路由实现原理

    一.概念 通过改变 URL,在不重新请求页面的情况下,更新页面视图. 二.实现方式 更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式: 1.Hash  ...

  8. Vue - Router 路由

    路由的注册 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  9. vue router路由(三)

    当环境搭建及Vue语法与指令都有所了解,该说下router. build目录是打包配置文件 (不建议动) config是vue项目基本配置文件 dist是构建后文件 js 手动创建 (根据需要) no ...

  10. vue router路由跳转了,但是页面没有变(已解决)

    小白学习 router.js:两个组件之间跳转 但是路由变了,页面没有改变的原因是因为app.vue里面没有router-view(很关键)

随机推荐

  1. react 常用的ui库

    1. https://ant.design/docs/react/introduce-cn   ANT DESIGNui 2. http://www.material-ui.com/#/   Mate ...

  2. 51nod 最大子段和问题

    给出一个整数数组a(正负数都有),如何找出一个连续子数组(可以一个都不取,那么结果为0),使得其中的和最大? 用f[i]表示以i为结尾的最大字段和,也就是说i一定要取, 那么f[i] = max(a[ ...

  3. SpringBoot @PathVariable 和 @requestParam区别

    1.若获取的入参的 参数 是下面这种形式 就使用 @requestParam 去获取 参数‘1’ /user?id=1 // url:xxx/user?id=1 @RequestMapping(&qu ...

  4. 【Uva 12105】Bigger is Better

    [Link]: [Description] 让你用最多n根棍子,组成一个数字,使得它能够被m整除; 数字1..9分别需要用-根棍子. 要求这个数字尽可能地大; 然后输出这个数字. [Solution] ...

  5. jmind-redis一个redis的nio客户端

    Redis是一个基于key/value的系统.Redis目前最新版本是2.2.4,用着很不错,不过java版本的客户端比较的不给力,目前redis 客户端jedis 是基于io 的socket . 而 ...

  6. 关于Java的10个谎言

    以下的这些都算是比較高级的问题了.面试中一般也非常少问到.由于它们可能会把面试者拒之门外.只是你能够自己找个时间来实践一下. System.exit(0)会跳过finally块的运行 System.s ...

  7. OCP将结束容器产业这个颠覆性产业的标准格式之争

    编者注:本文英文版来自VentureBeat,中文版由天地会珠海分舵编译.当以Docker为首的容器正在席卷全球.蔚然成风的颠覆着原来的应用开发和公布方式的时候,容器标准之争却从来没有消停过.而标准之 ...

  8. 通过rng-tools自动补充熵池

    通过rng-tools自动补充熵池原文 https://blog.csdn.net/tiantao2012/article/details/78792046首先查看系统当前熵池的大小# cat /pr ...

  9. android 图片特效处理之光照效果

    这篇将讲到图片特效处理的光照效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理:图片上面的像素点按照给定圆心,按照圆半径的变化,像素点的RGB值分别加上相应的值作为当前点的RGB值. 例: ...

  10. 8.ZOrder

    T3LayerZorder.h #pragma once #include "cocos2d.h" USING_NS_CC; class T3LayerZorder:public ...