vue-router 学习
Vue.js的一大特色就是构建单页面应用十分方便,既然要方便构建单页面应用那么自然少不了路由,vue-router就是vue官方提供的一个路由框架。总体来说,vue-router设计得简单好用,下面就来聊聊我实际用到过的一些方法,文章没有提到的可以去查看官方文档。vue-router的安装这里就不提了,相信会来看这篇博客同学,这些基本能力都是有的。
先上例子
<!-- html部分,省略head -->
<div id="app">
<div class="content">
<router-link to="/goods">商品</router-link>
<router-link to="/ratings">评论</router-link>
<router-link to="/seller">商家</router-link>
</div>
<router-view></router-view>
</div>
<script src="path-to-vue"></script>
<script src="path-to-vue-router"></script>
// 首先定义或者引入路由的组件
// 方法一:直接定义路由组件
const goods = { template: '<p>goods</p>' };
const ratings = { template: '<p>ratings</p>' };
const seller = { template: '<p>seller</p>' };
// 方法二:import引入路由组件
import goods from 'components/goods/goods';
import ratings from 'components/ratings/ratings';
import seller from 'components/seller/seller';
// 然后定义路由(routes),components还可以是Vue.extend()创建的
const routes = [
{ path: '/goods', component: goods },
{ path: '/ratings', component: ratings },
{ path: '/seller', component: seller }
];
// 接着创建路由实例
const router = new VueRouter({
// ES6缩写语法,相当于routes:routes
routes
});
// 最后创建vue实例并挂载
const app = new Vue({
el: '#app',
router
});
// 或者
const app = new Vue({
router
}).$mount('#app')
到这里就可以用vue-router轻松搭建一个单页面应用了。我一般都是使用模块化编程的形式,用.vue单文件,不知道在模块化编程里怎么加载vue-router的可以参考我的某个项目源码。
router-link和router-view
看了上面的例子,一定对router-link和router-view很感兴趣。
router-link
从上面例子中的书写形式就可以看出,router-link是一个组件,它默认会被渲染成一个带有链接的a标签,通过to属性指定链接地址。
注意:被选中的router-link将自动添加一个class属性值.router-link-active
。
router-link属性配置
to
这是一个必须设置的属性,否则路由无法生效。它表示路由的链接,可以是一个字符串也可以是一个描述目标位置的对象。
<router-link to="goods"></router-link>
<router-link to="{path='goods'}"></router-link>
replace
一个布尔类型,默认为false。如果replace设置为true,那么导航不会留下history记录,点击浏览器回退按钮不会再回到这个路由。
<router-link to="goods" replace></router-link>
tag
router-link默认渲染成a标签,也有方法让它渲染成其他标签,tag属性就用来设置router-link渲染成什么标签的。
<!-- 渲染成li标签 -->
<router-link to="goods" tag="li"></router-link>
active-class
上面说了被选中的router-link将自动添加一个class属性值.router-link-active
,这个属性就是来修改这个class值的。
router-view
这个组件十分关键,它就是用来渲染匹配到的路由的。
可以给router-view组件设置transition过渡,具体用法见Vue2.0 Transition常见用法全解惑。
还可以配合<keep-alive>
使用,keep-alive可以缓存数据,这样不至于重新渲染路由组件的时候,之前那个路由组件的数据被清除了。比如对当前的路由组件a进行了一些DOM操作之后,点击进入另一个路由组件b,再回到路由组件a的时候之前的DOM操作还保存在,如果不加keep-alive再回到路由组件a时,之前的DOM操作就没有了,得重新进行。如果你的应用里有一个购物车组件,就需要用到keep-alive。
<transition>
<keep-alive>
<router-view></router-view>
</keep-alive>
</transition>
一些小需求怎么实现
不同路由不同页面标题
多页面应用我们可以给每一个页面都设置一个不同的标题,但是如果是单页面应用的路由呢?其实也是可以实现的,实现的方法不止一种,我之前用的是结合命名路由和导航钩子函数的方法。如下:
// 定义路由的时候如下定义,name也可为中文
const routes = [
{ path: '/goods', component: goods, name: 'goods' },
{ path: '/ratings', component: ratings, name: 'ratings' },
{ path: '/seller', component: seller, name: 'seller' }
];
// 创建路由实例
const router = new VueRouter({
routes: routes
})
// 关键在这里,设置afterEach钩子函数
router.afterEach((to, from, next) => {
document.title = to.name;
})
命名路由
既然用到了命名路由,这里就提一下吧。命名路由就是用一个名称来标识一个路由,在定义路由的时候设置一个name属性即可。在router-link中也可以用路由的名字来链接到一个路由。
<router-link :to="{ name: 'seller'}">seller</router-link>
导航钩子
这个我还没怎么用过,它主要是用来拦截导航的,想使用的参考官方文档吧。
怎么刚进入应用就渲染某个路由组件
刚进入应用都是进入到“/”这个路由的,如果想直接进入到“/goods”怎么办,这里提供两种方法。一种是利用重定向,另一种是利用vue-router的导航式编程。
重定向
const routes = [
{ path: '/', redirect: '/goods'}
]
是不是很简单呢?重定向的目标也可以是一个命名的路由。
const routes = [
{ path: '/', redirect: { name: 'goods' }}
]
导航式编程
利用vue-router的导航式编程的router.push方法也可以实现上面的需求。
// 在创建vue实例并挂载后调用
router.push('/goods')
router.push方法就是用来动态导航到不同的链接的。它会向history栈添加一个新的记录,点击<router-link :to="...">
等同于调用router.push(...)。
vue-router 学习的更多相关文章
- Vue Router学习笔记
前端的路由:一个地址对应一个组件 Vue Router中文文档 一.路由基本使用 第1步:导入Vue Router: <script src="https://unpkg.com/vu ...
- vue:vue router学习小结
序:本篇内容主要侧重对前端路由的理解,以vue的官方路由作为载体,进行一个简单介绍. 一.路由历史: 最早开始的时候,项目开发使用的是SSR,即服务端渲染.这个时候刷新页面,服务器返回的是全部的htm ...
- 【VUE】VUE相关学习和知识备份
一.学习资料参考 1.1.Vue.js 官网:Vue.js https://cn.vuejs.org/ 官方文档:介绍 - Vue.js https://cn.vuejs.org/v2/guide/ ...
- 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- 深入浅出的webpack4构建工具---webpack+vue+router 按需加载页面(十五)
1. 为什么需要按需加载? 对于vue单页应用来讲,我们常见的做法把页面上所有的代码都打包到一个bundle.js文件内,但是随着项目越来越大,文件越来越多的情况下,那么bundle.js文件也会越来 ...
- python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)
昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...
- [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制
一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...
- [Vue 牛刀小试]:第十四章 - 编程式导航与实现组件与 Vue Router 之间的解耦
一.前言 在上一章的学习中,通过举例说明,我们了解了 Vue Router 中命名路由.命名视图的使用方法,以及如何通过 query 查询参数传参,或者是采用 param 传参的方式实现路由间的参数传 ...
- [Vue 牛刀小试]:第十三章 - Vue Router 基础使用再探(命名路由、命名视图、路由传参)
一.前言 在上一章的学习中,我们简单介绍了前端路由的概念,以及如何在 Vue 中通过使用 Vue Router 来实现我们的前端路由.但是在实际使用中,我们经常会遇到路由传参.或者一个页面是由多个组件 ...
随机推荐
- [Windows]卸载Office 2016密钥
cscript "C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs" /dstatus BTDRB
- 单源最短路径Dijkstra和优先级算法
百度百科:迪杰斯特拉算法. 代码实现如下: import java.util.Comparator; import java.util.PriorityQueue; import java.util. ...
- Commander
原文:https://www.npmjs.com/package/commander Commander.js Installation npm install commander --save Op ...
- hdu-1536 S-Nim SG函数
http://acm.hdu.edu.cn/showproblem.php?pid=1536 给出能够取的方法序列,然后求基本石子堆问题. 只要用S序列去做转移即可. 注意has初始化的一些技巧 #i ...
- php代码审计——DVWA
1.命令注入: LOW等级: 输入没有任何限制,可以直接ping: Medium等级: 介绍一下str_replace()函数和array_key()函数: Str_replace(str1,str2 ...
- 简单的python购物车
这几天,一直在学python,跟着视频老师做了一个比较简单的python购物车,感觉不错,分享一下 products = [['Iphone8',6888],['MacPro ...
- angular6 aot 预先编译
angular.json文件:(红色加粗部分) { "$schema": "./node_modules/@angular/cli/lib/config/schema.j ...
- C# Winform 仪表盘
winform 仪表盘相关下载链接://download.csdn.net/download/floweroflvoe/10432601?utm_source=bbsseo 控件首次拖拽上来是这样的: ...
- vue v-if控制显隐,页面加载出现闪现 v-cloak
<div id="divApp"> <div v-if="type === 'A'" v-cloak> A </div> & ...
- Python3+Scapy安装使用教程
一.说明 之前写DoS程序的时候(见"拒绝服务(DoS)理解.防御与实现"),数据包完全是自己构造的,这其中的难处一是要清楚各层协议的字段.字段长度.字段是数值还是字符.大头还是小 ...