JS中如何实现Laravel的route函数详解


Posted in Javascript onFebruary 12, 2017

大家应该都知道在Laravel的路由模块里,我们可以给每一个路由设定一个名字,比如:

Route::get('/blog/{blog}', 'BlogController@show')->name('blog.show')

然后就可以通过

route('blog.show', ['blog' => 1])

来获取到这个路由的访问地址,后端跳转可以用

return redirect()->route('blog.show', ['blog' => 1]);

这样做的好处是如果发生url变更,比如我想把 '/blog/{blog}'改成 '/boke/{blog}' ,只需要改路由文件,别的地方都不用调整。

但这个仅限于后端,以及blade模板可以使用,稍微上点规模的网站都会把js文件单独拎出来,不会直接写在blade模板中,这样就导致js里发ajax请求时或者页面跳转时只能将请求地址写死,比如

location.href = '/blog/' + id;

这样万一路由发生变更,还得去修改js文件,如果同一个路由被多个js调用,漏改一两个还是很容易发生的。所以我就考虑能不能在js中实现一个类似后端的route函数。

最终的解决方案很简单,两个函数就搞定。

后端部分需要实现一个函数

function route_uri($name)
{
 return app('router')->getRoutes()->getByName($name)->getUri();
}

这个函数的作用是根据路由名称返回原始的路由地址,比如:

echo route_uri('blog.show'); // 会输出/blog/{blog}

前端也只需要一个函数:

let route = (routeUrl, param) => {
 let append = [];
 for (let x in param) {
  let search = '{' + x + '}';
  if (routeUrl.indexOf(search) >= 0) {
   routeUrl = routeUrl.replace('{' + x + '}', param[x]);
  } else {
   append.push(x + '=' + param[x]);
  }
 }
 let url = '/' + _.trimStart(routeUrl, '/');
 if (append.length == 0) {
  return url;
 }
 if (url.indexOf('?') >= 0) {
  url += '&';
 } else {
  url += '?';
 }
 url += append.join('&');
 return url;
}

注:这里引用了lodash

这个函数的作用是:

route('/blog/{blog}', {blog: 1}); //返回 /blog/1
route('/blog/{blog}', {blog: 1, preview: 1}); //返回 /blog/1?preview=1

然后就很简单了,在blade模板中定义:

var routes = {
 blog: {
  show: '{{ route_uri('blog.show') }}',
  update: '{{ route_uri('blog.update') }}',
  destroy: '{{ route_uri('blog.destroy') }}'
 }
};

在js文件里就可以:

$.post(route(routes.blog.update, {blog: 1}), {title: 'xxx', content: 'xxx'})

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JS在textarea光标处插入文本的小例子
Mar 22 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
Nov 29 Javascript
js实现同一个页面多个渐变效果的方法
Apr 10 Javascript
jquery图片轮播特效代码分享
Apr 20 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
Jan 04 Javascript
Vue组件化开发思考
Feb 02 Javascript
VUE写一个简单的表格实例
Aug 06 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
Sep 21 Javascript
JavaScript console的使用方法实例分析
Apr 28 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 #Javascript
浅谈js中同名函数和同名变量的执行问题
Feb 12 #Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 #Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 #Javascript
浅谈jQuery中事情的动态绑定
Feb 12 #Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 #Javascript
jq stop()和:is(:animated)的用法及区别(详解)
Feb 12 #Javascript
You might like
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
javascript 操作符(~、&、|、^、)使用案例
2014/12/31 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
JavaScript中0和""比较引发的问题
2016/05/26 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
技术学校毕业生求职信分享
2013/12/02 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
运动会的口号
2014/06/09 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
原告代理词范文
2015/05/25 职场文书
文明礼貌主题班会
2015/08/14 职场文书