Vue路由前后端设计总结


Posted in Javascript onAugust 06, 2019

一开始我还以为vue的路由只能用在工程化的项目里面呢,然后研究了一下才发现,在脚本化里面也是可以用的。其实呢不管在哪里用,把原理研究明白就对了。

一、 官网demo

这里不得不吐槽一下官网,写的不清不楚的,在哪里使用都没有说清楚,几行代码一句话就轻飘飘的交代完事了,剩下的事情还得自己研究,比如 HTML5 History API 是怎么回事。这里又涉及了一个问题,想要用好vue,必须的基础是要先掌握的,因为vue的官网教程里面不会管这些基础知识的。

先看官网的代码:

const NotFound = { template: '<p>Page not found</p>' }
const Home = { template: '<p>home page</p>' }
const About = { template: '<p>about page</p>' }

const routes = {
 '/': Home,
 '/about': About
}

new Vue({
 el: '#app',
 data: {
  currentRoute: window.location.pathname
 },
 computed: {
  ViewComponent () {
   return routes[this.currentRoute] || NotFound
  }
 },
 render (h) { return h(this.ViewComponent) }
})

很简单吧就这么几句,浪费了我好多时间才研究明白。恩,好吧还有一个地方每太明白。

首先定义了三个“常量”,就是不能改的那种变量,代表三个页面,或者说是三个模板。分别是404、首页和关于我们。

然后定义了一个路由规则,其实就是一个json,也可以理解为是一个实体类。Key代表url的地址后面的路径和文件名,后面的是我们的真实页面,也就是第一行定义的三个常量。

然后就是常见的vue的实例了,首先需要一个div与之对应,然后是data返回url上面的地址,然后ViewComponent 是根据url地址返回对应的模板(页面)。

最后是render 。大概是实现绑定div的功能吧。

根据这个意思补充了一个页面

<body>
   <span onclick="myURL('/')">首页</span>
   <span onclick="myURL('/about')">关于</span>
   <div id="app"></div>
 </body>

然后呢,运行网页显示 Page not found 404 ,看来路由还是起作用了。那么home和about要怎么出来呢?

二、HTML5 History API

首先要补充一下 HTML5 History API的相关知识,如果已经掌握了那么请略过。

HTML5 History API提供了一种功能,能让开发人员在不刷新整个页面的情况下修改站点的URL。这个功能很有用,例如通过一段JavaScript代码局部加载页面的内容,你希望通过改变当前页面的URL来反应出页面内容的变化,这时该功能可以派上用场。

我们可以用 history.pushState(null, null, ‘about'); 来改变url地址,这种方式只是单纯的修改地址里的url,而不会向服务器提交,这样页面就不会被刷新,我们才有机会执行vue的代码。

然后呢,页面当然是不会有啥变化的,因为vue是数据驱动,我们的数据改变了吗?并没有,我们只是改变了一下url。这个vue似乎没有对rul做监听,或者是我还不知道怎么让vue去监听url的变化,总之我们先自己改变数据,然后再去研究vue有没有办法去监听url。

我们在写一行修改数据的代码route.currentRoute = window.location.pathname就可以了。

最后加一个简单的导航,执行上面两行js代码。

<span onclick="myURL('/')">首页</span>
<span onclick="myURL('/about')">关于</span>

function myURL(name) {
    history.pushState(null, null, name);
    route.currentRoute = window.location.pathname;
}

三、按了F5怎么办?

按F5会刷新页面,如果这时候url地址栏是 “/about” ,那么就会向服务器提交这个网址,很显然会出现服务器的404页面。因为服务器网站里面并没有这个地址。那么怎么办呢?目前想到的办法就是修改网站的404页面。比如IIS,可以到IIS里改一下,把我们做的这个router.html设置为404的响应页面,这样按F5就没事了。

当然这种方式并不是太好的选择,只是一种临时的方法。应该会有更好的方法吧。没事不急慢慢学。

这种方式还支持直接在浏览器的地址栏里面输入 http://127.0.0.1:8000/about 也是可以正常运行的。只需要注意一下vue.js的引用地址确保能够正确加载js文件即可。

那么如果地址栏里输入 http://127.0.0.1:8000/aboutss 呢?当然是vue设计的404模块了。

不过还有一个问题,那个 const About 要怎么改?这种简单的模板没办法做复杂应用的呀。也许只有在工程化的项目里,路由才能发挥最大的作用吧。

感谢大家的阅读和对三水点靠木的支持。

Javascript 相关文章推荐
javascript call和apply方法
Nov 24 Javascript
用JavaScript实现单继承和多继承的简单方法
Mar 29 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
js数组与字符串的相互转换方法
Jul 09 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
Angular2 组件通信的实例代码
Jun 23 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
Vuejs通过拖动改变元素宽度实现自适应
Sep 02 Javascript
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
vue实现行列转换的一种方法
Aug 06 #Javascript
微信小程序点餐系统开发常见问题汇总
Aug 06 #Javascript
详解使用WebPack搭建React开发环境
Aug 06 #Javascript
vue-cli3+typescript新建一个项目的思路分析
Aug 06 #Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 #Javascript
angularjs请求数据的方法示例
Aug 06 #Javascript
通过js示例讲解时间复杂度与空间复杂度
Aug 06 #Javascript
You might like
快速开发一个PHP扩展图文教程
2008/12/12 PHP
基于php权限分配的实现代码
2013/04/28 PHP
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
亚马逊印度站:Amazon.in
2017/10/15 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
中专生自我鉴定书范文
2013/12/28 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python