Vue之路由的使用
零、传统路由与SPA的区别
- 传统开发方式下,URL改变后,就会立刻发生请求去请求整个页面,这样可能请求加载的资源过多,可能会让页面出现白屏。
- 在SPA(Single Page Application)单页面应用下,当锚点值改变后,不会立刻发生请求,而是在某个合适的时机,发起ajax请求,实现局部改变页面的数据。优点是:不是整个页面发生跳转,那么用户的体验就更好了。
一、vue-router的使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<!-- 1. 先引入vue.js(被vue-router所依赖)-->
<script src="../node_modules/vue/dist/vue.js"></script>
<!-- 2. 再引入插件vue-router(使用npm install vue-router --save安装到相应的文件夹下)-->
<script src="../node_modules/vue-router/dist/vue-router.js"></script>
<script>
/* 演示示例:页面里有2个a标签,注册和登录,点击注册、登录返回不同的内容,
且有公共内容(主页公共数据),来实现局部页面的跳转且URL要发生相应的改变。
*/
// 3. 让vue使用VueRouter创建(某些情况下可以不用,这里暂且加上)
Vue.use(VueRouter);
// 声明使用了路由的组件
var Login = {
template: `
<div>我是登录页面</div>
`
};
var Register = {
template: `<div>我是注册页面</div>`,
};
// 4. 创建VueRouter对象
var router = new VueRouter({
// 5. 配置路由对象的规则如匹配路径、组件等
routes: [
{
path: '/login',
component: Login
},
{
path: '/register',
component: Register
}
]
});
// 当使用了vue-router后就会抛出两个全局的组件:router-link、router-view
// router-link相当于a标签,router-view是路由组件渲染的出口
// 声明入口组件App
var App = {
template: `
<div>
我是公共内容<br/>
<router-link to='/login'>登录</router-link>
<router-link to='/register'>注册</router-link>
<router-view></router-view>
</div>
`,
};
new Vue({
el: '#app',
// 5. 将配置后的路由对象关联到vue实例化对象中
router: router,
template: `<App />`,
components: {
App
}
});
</script>
</body>
</html>
命名路由
路由也可以拥有自己的名字,上面的例子也可以改写为下面:
routes: [
{
path: '/login',
name: 'login',
component: Login
},
{
path: '/register',
name: 'register',
component: Register
}
]
...
<router-link :to='{name:"login"}'>登录</router-link>
<router-link :to='{name:"register"}'>注册</router-link>
路由参数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script src="../node_modules/vue-router/dist/vue-router.js"></script>
<script>
/*
路由参数的使用:常见的路由范式有以下2种:
- xxx.html/user/1 params 动态路由参数(restful风格)
- xxx.html/user?userId=1 query 查询参数
*/
Vue.use(VueRouter);
// 声明使用了路由的组件
var Login = {
template: `
<div>我是登录页面</div>
`
};
var Register = {
template: `<div>我是注册页面</div>`,
};
var router = new VueRouter({
routes: [
{
// 动态路由参数以冒号开头
path: '/login/:id',
name: 'login',
component: Login
},
{
// query参数在这里不做修改
path: '/register',
name: 'register',
component: Register
}
]
});
// 声明入口组件App
var App = {
template: `
<div>
我是公共内容<br/>
<router-link :to = "{name:'login',params:{'id':1}}">登录params</router-link>
<router-link :to = "{name:'register',query:{'userId':2}}">注册query</router-link>
<router-view></router-view>
</div>
`,
};
new Vue({
el: '#app',
router: router,
template: `<App />`,
components: {
App
}
});
</script>
</body>
</html>
二、嵌套路由、动态路由
掘金就是由vue写的,接下来的这个demo会模仿掘金首页的构成,实现嵌套路由、动态路由匹配功能。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>掘金</title>
</head>
<body>
<div id="app">
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script src="../node_modules/vue-router/dist/vue-router.js"></script>
<script>
Vue.use(VueRouter);
//第二层路由组件,实现了嵌套的路由组件
// 这一层的三个路由组件:推荐、后端、前端可以看成结构是相同的,只有数据不同
// 所以为了提高代码的复用性,就需要采用动态路由匹配的方式,及只创建一个组件,然后替换里面的数据
var Home = {
template: `
<div>
<router-link :to="{name:'category', params:{category:'recommened'}}">推荐</router-link>
<router-link :to="{name:'category', params:{category:'backend'}}">后端</router-link>
<router-link :to="{name:'category', params:{category:'fronted'}}">前端</router-link>
<router-view></router-view>
</div>
`
};
var Pins = {
template: `<div>我是沸点</div>`
};
var Topics = {
template: `<div>我是话题</div>`
};
// 创建一个组件,然后使用动态路由匹配的方式
var Commons = {
data() {
return {
msg: 'recommened'
}
},
template: `
<div>
我是 {{ msg }}
</div>
`,
watch: {
// 利用watch侦听器来监听$route来检测动态路由的切换
'$route' (to, from) {
console.log(to.params.category);
// 模拟路由的变化引起的数据的变化
this.msg = to.params.category;
}
}
};
var router = new VueRouter({
routes: [
{
path: '/',
component: Home,
// 嵌套路由的写法:
children: [
{
path: 'welcome/:category',
name: 'category',
component: Commons
}
]
},
{
path: '/pins',
component: Pins
},
{
path: '/topics',
component: Topics
}
]
});
// 第一层路由组件包括首页、沸点、话题等
var FRouter = {
template:`
<div>
第一层路由组件
<router-link to="/">首页</router-link>
<router-link to="/pins">沸点</router-link>
<router-link to="/topics">话题</router-link>
<router-view></router-view>
</div>
`
};
new Vue({
el: '#app',
router: router,
template: '<FRouter />',
components: {
FRouter
}
});
</script>
</body>
</html>
Vue之路由的使用的更多相关文章
- vue(5)—— vue的路由插件—vue-router 常用属性方法
前端路由 看到这里可能有朋友有疑惑了,前端也有路由吗?这些难道不应该是在后端部分操作的吗?确实是这样,但是现在前后端分离后,加上现在的前端框架的实用性,为的就是均衡前后端的工作量,所以在前端也有了路由 ...
- vue父路由默认选中第一个子路由,切换子路由让父路由高亮不会消失
vue父路由默认选中第一个子路由,切换子路由让父路由高亮不会消失 正常默认会有 .router-active-class 识别高亮 达到以上注意: 1. exact 不要加 注意是不要加,exact ...
- vue的路由映射问题
遇到的问题 今天在项目中遇到了一个问题,明明在Router文件夹下的路由js映射文件中,配置好了,如下: // 生日贺卡 { path: 'birthdayRemind', component: lo ...
- 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
- Vue.js路由
有时候,我们在用vue的时候会有这样的需求,比如一个管理系统,点了左边的菜单栏,右边跳转到一个新的页面中,而且刷新的时候还会停留在原来打开的页面. 又或者,一个页面中几个不同的画面来回点击切换,这两种 ...
- Vue.js路由详解
有时候,我们在用vue的时候会有这样的需求,比如一个管理系统,点了左边的菜单栏,右边跳转到一个新的页面中,而且刷新的时候还会停留在原来打开的页面. 又或者,一个页面中几个不同的画面来回点击切换,这两种 ...
- vue权限路由实现方式总结二
之前已经写过一篇关于vue权限路由实现方式总结的文章,经过一段时间的踩坑和总结,下面说说目前我认为比较"完美"的一种方案:菜单与路由完全由后端提供. 菜单与路由完全由后端返回 这种 ...
- Vue 多路由文件的合并
Vue 多路由文件的合并 1.使用的是ES6 数组的合并方法 let routes = new Set([...routes1, ...homerouters]);2.两个路由文件,导出的实际上就是一 ...
- vue+element-ui路由配置相关
vue+element-ui路由配置相关 转自:http://www.cnblogs.com/MonaSong/p/6703804.html vue-router2中说明了,子路由前面可以不加'/', ...
- vue嵌套路由-query传递参数(三)
在嵌套路由中我们经常会遇到父路由向子路由里面传递参数,传递参数有两种方法,通过 query 或者 params index.html <div id="app"> &l ...
随机推荐
- 学习Java第9天
今天所作的工作: 反射,枚举类型与泛型 明天工作: 1.线程 2.网络通信 所遇到的问题及解决方法: 反射基本思想,泛型类似于类模板. 理解反射太难了,转悠了好半天,关键是理解反射的思想,才容易学.
- C++ 微信多开
应用是如何判断多开 一.通过查找窗口标题或者类名来判断程序是否正在运行. 二.通过互斥对象确定程序是否运行,大多数软件都是使用CreateMutexW 判断多开的. 三.内存映射物理文件,控制多开. ...
- Spring系列8:bean的作用域
本文内容 bean定义信息的意义 介绍6种bean的作用域 bean定义信息的意义 Spring中区分下类.类定义信息,类实例对象的概念?不容易理解,以餐馆中点炒饭为例. 类: 相当于你看到菜单上炒饭 ...
- Vue.js的指令、生命周期钩子与数据选项
vue.js官网:https://cn.vuejs.org/v2/guide/components-registration.html 一.常用指令 v-if ... v-else: 作用:控制元素是 ...
- plsql 存储过程 介绍。
/* 7-22 知识总结? 1. 存储过程 2.函数 3.包 */ /*1.什么是存储过程? 语法? 存储过程:类似于Java中的方法:完成一个特定的功能,一系列代码 (增删改操作和一些逻辑判断,se ...
- git命令行-新建分支与已提交分支合并
例如要将A分支的一个commit合并到B分支: 首先切换到A分支 git checkout A git log 找出要合并的commit ID : 例如 325d41 然后切换到B分支上 git ch ...
- 「SHOI2006」有色图
首先发现这题虽然是边的置换,但是是由点的置换所造成的,并且发现点置换对应的所有边置换和置换操作构成置换群. 由于颜色可以全选,那么根据 Polya 定理,答案为: \[|X / G| = \frac{ ...
- IDE集成git
目录 简介 Git安装 IDE集成Git IDE集成Git代码的创建分享上传 代码的下载和普通上传 分子的创建以及合并 代码的回滚 查看历史版本 简介 Git 是一个开源的分布式版本控制软件,用以有效 ...
- jQuery EasyUI 的editor组件使用
问题:最近在优化一个项目时,前端用到了 easyui这个插件来实现表格,搞了很久,才实现出一部分功能,但是还是有很多地方不熟悉,故记录一下,以后再研究 第一个实例------------------- ...
- CSS3自定义滚动条样式-webkit内核
自定义滚动条实现 此部分针对webkit内核的浏览器,使用伪类来改变滚动条的默认样式,详情如下: 滚动条组成部分 1. ::-webkit-scrollbar 滚动条整体部分 2. ::-webkit ...