路由是根据不同的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()

如果提供了 path,params 会被忽略

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. c#记录日志的方法

    /// <summary> /// 生成日志 /// </summary> /// <param name="text"></param& ...

  2. angularjs input使用ng-model双向绑定无效bug解决

    一.问题描述 当我们给input双向绑定变量的时候,使用ng-model有时候会出现无效的情况 二.解决办法 将绑定的变量写成对象的形式 控制器定义变量: $scope.inputText = {va ...

  3. lunix 安装使用mongo

    一.下载安装mongo版本客户端 1.进入mongo官网选择需要的版本号: https://www.mongodb.com/download-center/community(官网网址) 2.选择下载 ...

  4. cgroups

    CGROUPS官方解析,用户空间怎样监控 http://blog.chinaunix.net/uid-16763274-id-2103750.html cgroups概念 fr=aladdin&quo ...

  5. 改动UINavigationBar (导航栏)上NavigationBarItem 的字体大小和颜色的用法

    //创建一个左边button UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"<" ...

  6. Bmob移动后端云服务平台--Android从零開始--(一)何为Bmob

    Bmob移动后端云服务平台--Android从零開始--(一)何为Bmob 在正式的项目开发中,单client不能满足我们的需求,须要实现client与服务端的连接. 而在编写Android服务端代码 ...

  7. js防止提交数据之后的按钮连击

    js防止提交数据之后的按钮连击 一.实例描述 当页面提交的数据特别多时,页面会反应比较迟钝,此时如果用户等不及而连续单击按钮,导致数据重复提交.本案例就是为了防止数据重复提交. 二.截图 三.代码 & ...

  8. POJ 2457 BFS

    题意: 说人话: 从A到B连边 找从1到k的最短路 并输出路径(随便一条即可 ) 如果不能到达 输出-1 思路: 搜 //By SiriusRen #include <queue> #in ...

  9. C++ 补课(二)

    1,如果遇到派生类成员和基类成员的名称冲突的情况,程序会采用派生类成员执行相应的操作.如果需要使用基类中的同名成员,则必须在程序中使用全局分辨符“::” 虚基类 —— 派生类在继承基类时加入“virt ...

  10. 在Vue单页面应用中使用Promise链式调用

    eg: this.commonLoginFun().then((res) => { if (res.errNo === 0) { const { isLogin } = res.data; if ...