2018-03-19 VUE做简历制作工具5
例子:
![](https://img.haomeiwen.com/i5037851/e4b865917f0789af.png)
![](https://img.haomeiwen.com/i5037851/fb9dbeec0cba62df.png)
![](https://img.haomeiwen.com/i5037851/b4039170f9825129.png)
点击tab1显示content1
点击tab2显示content2
问题:如果目前显示的是content2,页面刷新或者分享给别人,又回到默认的content1了
可以通过url来保存当前状态
方法一:通过hash里的锚点来保存
![](https://img.haomeiwen.com/i5037851/235100cbc8c4d03d.png)
![](https://img.haomeiwen.com/i5037851/995395eca36577a8.png)
![](https://img.haomeiwen.com/i5037851/41ad7f00df158544.png)
点击后url在变,但是把这个url分享出去还是没有什么用
![](https://img.haomeiwen.com/i5037851/b7060fef4a20e086.png)
1、设置hash location.hash=index
2、读取hash let index = location.hash ||'#0' //取的时候会有#号
3、分析hash index=index.substring(1) //不要#号,从1开始
![](https://img.haomeiwen.com/i5037851/2e25c41aa4c1cf27.png)
既然可以用锚点,那么也可以换一种方式来进行,用a标签的href来记录,这个时候就可以不用监控li的点击事件,而是监控href的变更
![](https://img.haomeiwen.com/i5037851/17649476047e06f7.png)
那么上面2种有没有问题呢?有
如果html还有其他的a标签,被点击之后
![](https://img.haomeiwen.com/i5037851/1a6b5436e91aa495.png)
锚点就会变了,
![](https://img.haomeiwen.com/i5037851/cc32f24b83ca9a60.png)
尤其是你的这个锚点不符合代码里写的路由规则
分享出去,页面会刷新显示到之前默认的
![](https://img.haomeiwen.com/i5037851/c731ce191d95f2c8.png)
![](https://img.haomeiwen.com/i5037851/ac7f601b5949af0f.png)
换href为路径,但是a标签,换路径会跳转
那么我们先阻止默认跳转
然后打印下
![](https://img.haomeiwen.com/i5037851/043a67fc7971110f.png)
![](https://img.haomeiwen.com/i5037851/dd84dccdb89eb92d.png)
![](https://img.haomeiwen.com/i5037851/3992a9b1915fe44d.png)
![](https://img.haomeiwen.com/i5037851/8358176fe4800aba.png)
换一种方式
console.log(a.getAttribute('href'))
![](https://img.haomeiwen.com/i5037851/b6b50ba8037557f3.png)
![](https://img.haomeiwen.com/i5037851/5cd9f08d837c61da.png)
改了url,不跳转页面 ——利用history API无刷新的更改地址栏
点击其他a标签也不会有影响
![](https://img.haomeiwen.com/i5037851/8f753e8c581a563f.png)
问题:这种方式不能分享(链接给别人),是404的,因为服务器不知道
那么在服务器里识别下
![](https://img.haomeiwen.com/i5037851/a70fb69e95c24873.png)
![](https://img.haomeiwen.com/i5037851/e1acd120386f3395.png)
另外一种,后台不管路径,不管前端请求什么,后端都返回index.html(最好不要这样)
![](https://img.haomeiwen.com/i5037851/8dc99db7e56150c7.png)
什么是路由:
if path===xxx,那么就执行yyy()
else if path===xxx2,那么就执行yyy2()
给我一个路径,我就返回给你一个响应
前端做路由,就是前端路由
后端做路由,就是后端路由
![](https://img.haomeiwen.com/i5037851/28a8dd7356347c12.png)
前端的路由
![](https://img.haomeiwen.com/i5037851/a074f691ba8a9816.png)
后端的路由
用库vue router来进行路由
继续在vue_resume里进行
![](https://img.haomeiwen.com/i5037851/a430ef70995f7869.png)
希望单独的页面来做登录,用路由来做
![](https://img.haomeiwen.com/i5037851/ca47acc32b840d3e.png)
希望有个单独的页面来显示注册
进入vue-router
![](https://img.haomeiwen.com/i5037851/7169a2f7b6910d00.png)
router-link:有特殊功能的a标签
![](https://img.haomeiwen.com/i5037851/ca01678fd248c191.png)
http://jsbin.com/nicopicequ/edit?html,js,output
![](https://img.haomeiwen.com/i5037851/69c192b3e8f2d4df.png)
是一种hash,我们能不能换一种方式呢?用路径
![](https://img.haomeiwen.com/i5037851/49501ed24054d43c.png)
history模式,就是路径了,
![](https://img.haomeiwen.com/i5037851/1be805e1b9128d5e.png)
不能刷新
![](https://img.haomeiwen.com/i5037851/378eca3b777b4c4d.png)
安装vue-router
npm install vue-router
![](https://img.haomeiwen.com/i5037851/c34070c83537cdd6.png)
如何引入组件呢?
![](https://img.haomeiwen.com/i5037851/0ab5948a2b260401.png)
方法一:用webpack
![](https://img.haomeiwen.com/i5037851/898ff05dafb9d5d9.png)
方法二:用命名空间
![](https://img.haomeiwen.com/i5037851/ef4e315b75c5fd2b.png)
![](https://img.haomeiwen.com/i5037851/a5cf9aee1a9b3aa8.png)
![](https://img.haomeiwen.com/i5037851/c3afea71822f0061.png)
![](https://img.haomeiwen.com/i5037851/b1a17844c2c18fe1.png)
![](https://img.haomeiwen.com/i5037851/d14e6e7faea706d0.png)
![](https://img.haomeiwen.com/i5037851/25b7881c7b2bba22.png)
进入登录界面后,其没有父级了
![](https://img.haomeiwen.com/i5037851/333645179b083664.png)
app里只有一个div
那么登录之后的数据放哪里呢?
页面结构
![](https://img.haomeiwen.com/i5037851/8fec93750ad2b2a2.png)
如果这个数据是共有的,那么就把它放在root里
如果这个数据是自己单独的,那么就放在自己的data里
这个项目之前是单页面,现在是单页面+前端路由
a标签是后端路由
router-link是preventdefault的a标签→前端路由
![](https://img.haomeiwen.com/i5037851/7da6c81a885e3cf3.png)
之前后端管,#之后前端管
根据不同的路径展示不同的UI,就是router ,vue-router是其中之一
![](https://img.haomeiwen.com/i5037851/71f5dc81c74216a0.png)
前端的发展路程