路由是根据不同的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. openSUSE Leap与 SELS的区别

    openSUSE Leap 是 openSUSE 常规发行版本的新名称,在 13.2 之前它仅仅被称为“openSUSE”. 一.openSUSE 发行周期:(15年以前仅有一个openSUSE发行版 ...

  2. 好吧,左小波出山了——ie8兼容indexOf问题

    我,还是一个不懂世事的毛头小子,第一次写博.万事开头难,没事咱慢慢来.咳,练文笔吗.我觉得写东西最锻炼逻辑思维,我是一个不善于表达的人,可能是程序员的通病,但你看看人家王小波,八九十年代的作家兼职程序 ...

  3. 【Henu ACM Round#15 D】Ilya and Escalator

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 概率DP; 设f[i][j]表示前i个单位时间,j个人进入房间的概率是多少 然后想一下和i-1秒的时候要怎么转移就可以了. i-1秒 ...

  4. OpenCASCADE 麻花钻头造型实例分析

    OpenCASCADE 麻花钻头造型实例分析 eryar@163.com Abstract. OpenCASCADE provides a simple twist drill bit modelin ...

  5. 欢天喜地迎国庆,国产开源编程语言 RPP 1.87 公布!

    更新例如以下: 1.支持超级宏 2.修复bug 下载地址: https://github.com/roundsheep/rpp 超级宏能够随意定义语法,制约你的仅仅有想象力: void main() ...

  6. 如何实现对网站页面访问量的统计(javaweb和php)

    如何实现对网站页面访问量的统计(javaweb和php) 一.总结 一句话总结:其实很简单啦,每访问一次那个页面对应的index函数(控制器中的那个函数)访问次数就加1就可以了. 1.javaweb中 ...

  7. Ubuntu 12.04使用演示

    今年年初,发布了Ubuntu 12.04(代号Precise Pangolin),但正式版预计将于2012年的4月底发布,作者对最新版本的ubuntu做了试用,先将操作视频与大家分享.更多内容请关注本 ...

  8. CF 843 A. Sorting by Subsequences

    A. Sorting by Subsequences You are given a sequence a1, a2, ..., an consisting of different integers ...

  9. VMwarep挂载镜像及配置本地Yum源

    1.挂载镜像: *. 通过mount命令         linux mount挂载设备(u盘,光盘,iso等 )使用说明 *.  通过VMware的控制页面手工挂载 1.1    打开Vmware软 ...

  10. 【CS Round #39 (Div. 2 only) B】Circle Elimination

    [Link]:https://csacademy.com/contest/round-39/task/circle-elimination/ [Description] [Solution] 把n个点 ...