3. Vue-router 路由
路由是根据不同的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 路由的更多相关文章
- 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
- Vue系列:Vue Router 路由梳理
Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参数. ...
- 04 Vue Router路由管理器
路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成 ...
- Vue Router路由管理器介绍
参考博客:https://www.cnblogs.com/avon/p/5943008.html 安装介绍:Vue Router 版本说明 对于 TypeScript 用户来说,vue-router@ ...
- Vue Router 路由守卫:完整的导航解析流程
完整的导航解析流程 1 导航被触发. 2 在失活的组件里调用离开守卫. 3 调用全局的 beforeEach 守卫. 4 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+). ...
- Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转
问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...
- Vue Router 路由实现原理
一.概念 通过改变 URL,在不重新请求页面的情况下,更新页面视图. 二.实现方式 更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式: 1.Hash ...
- Vue - Router 路由
路由的注册 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- vue router路由(三)
当环境搭建及Vue语法与指令都有所了解,该说下router. build目录是打包配置文件 (不建议动) config是vue项目基本配置文件 dist是构建后文件 js 手动创建 (根据需要) no ...
- vue router路由跳转了,但是页面没有变(已解决)
小白学习 router.js:两个组件之间跳转 但是路由变了,页面没有改变的原因是因为app.vue里面没有router-view(很关键)
随机推荐
- Asp.Net碎知识
在aspx页面 获取值: UserModel user=new UserModel();实例化 user.Address=context["txtAddress"]; 如果前台不需 ...
- css3 实现动画效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 用efibootmgr管理UEFI启动项,添加丢失的启动项
UEFI用来替代传统BIOS引导操作系统,学会修改UEFI启动项也变得十分重要,UEFI全称为:“统一的可扩展固件接口”(Unified Extensible Firmware Interface), ...
- sed的一些tricks
1.sed -f xx.sed input_file 可以将一系列操作放在一个xx.sed脚本里执行 ``` #!/bin/sed -f ``` 2.在匹配字符串后面或行尾添加内容 在text后面添加 ...
- RvmTranslator6.2 is released
RvmTranslator6.2 is released eryar@163.com RvmTranslator can translate the RVM file exported by AVEV ...
- 一台服务器安装运行多个Tomcat及注册服务
项目需要,自己配置了一下,顺便分享出来. 1.下载对应版本Tomcat,这里下载Tomcat7.0.65.zip; 下载地址:http://archive.apache.org/dist/tomcat ...
- 压状态bfs
一般地图很小,状态不多,可以装压或者hash,构造压缩或hash的函数,构造还原地图的函数,然后就无脑bfs(感觉就是SPFA) 题目: 1.玩具游戏:二进制压缩状态 #include<cstd ...
- 今日SGU 5.3
SGU 107 题意:输入一个N,表示N位数字里面有多少个的平方数的结尾9位是987654321 收获:打表,你发现相同位数的数相乘结果的最后几位,就和那两个相乘的数最后几位相乘一样,比如3416*8 ...
- C++集合运算函数总结 & 需要有序集合的操作
前提:两个集合已经有序.merge() //归并两个序列,元素总个数不变,只是将两个有序序列归并为一个有序序列.set_union() //实现求集合A,B的并.set_difference()//实 ...
- AC自己主动机模板
AC自己主动机模板-- /* * AC自己主动机模板 * 用法: * 1.init() : 初始化函数 * 2.insert(str) : 插入字符串函数 * 3.build() : 构建ac自己主动 ...