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 相关文章推荐
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
JQuery简单实现锚点链接的平滑滚动
May 03 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
实现高性能JavaScript之执行与加载
Jan 30 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
input框中的name和id的区别
Nov 16 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
JS中用EL表达式获取上下文参数值的方法
Mar 28 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
element-ui中Table表格省市区合并单元格的方法实现
Aug 07 Javascript
Vue调用后端java接口的实例代码
Oct 28 Javascript
关于angular 8.1使用过程中的一些记录
Nov 25 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 5.5版本的array_column()函数
2014/10/24 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
Tensorflow 实现释放内存
2020/02/03 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
2014教师党员自我评议总结
2014/09/19 职场文书
如何写通讯稿
2015/07/22 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
详解SQL的窗口函数
2022/04/21 Oracle