路由是根据不同的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. "中国制造2025"+"互联网+",引领制造业发展

    "中国制造2025"+"互联网+",引领制造业发展

  2. 紫书 习题 10-44 UVa 11246 ( 容斥原理)

    把k的倍数的删去(k, 2k, 3k--),但是k^2不应该删去,因为k已经删去,所以不存在某个数乘上k之后为k^2 所以k^2可以留下,然后因为有k^2,所以k^3就是k^2的k倍,所以k^3要删去 ...

  3. CSUOJ 1532 JuQueen

    Problem H JuQueen JuQueen is the super computer with the best performance allover Germany. It is on ...

  4. thinkphp3.2.3 隐藏url上home模块以及index.php文件

    1.去掉Home index.php 添加如下代码 define('BIND_MODULE', 'Home'); 这时就隐藏了url中的Home 2.去掉index.php thinkphp3.2.3 ...

  5. Android实现本地图片选择及预览缩放效果仿春雨医生

    在做项目时常常会遇到选择本地图片的需求.曾经都是懒得写直接调用系统方法来选择图片.可是这样并不能实现多选效果.近期又遇到了,所以还是写一个demo好了.以后也方便使用.还是首先来看看效果 显示的图片使 ...

  6. maven项目运行没问题,但是项目名上有一把×

    原因有以下:你先要自己进行检查,看是出现的什么错误 有红叉,并不代表编译和运行就出错.到Windows—Show view—Problems下看看到底报了什么错.像一些validation出错,项目虽 ...

  7. IOS打包发布APP的所有详细流程

    其他一些不错的参考:点击打开链接 一.申请苹果开发者账号 首先需要申请苹果开发者账号才能在APP store 里发布应用. 开发者账号分为:(1)个人开发者账号   (2)企业开发者账号   主要的区 ...

  8. java种instanceof方法和getclass方法的区别

    在比较一个类是否和另一个类属于同一个类实例的时候,我们通常可以采用instanceof和getClass两种方法通过两者是否相等来判断,但是两者在判断上面是有差别的,下面写个测试类. public c ...

  9. JS 在HTML页面显示当前日期

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...

  10. AES与RAS结合加解密方案

    import java.io.IOException; import java.security.InvalidKeyException; import java.security.KeyFactor ...