最近项目开发中用到了layuiAdmin的单页版进行开发,期间遇到一些问题,在此总结一二:

单页版缓存问题

由于单页面版本的视图文件和静态资源模块都是动态加载的,所以可能存在浏览器的本地缓存问题,因此,为了避免改动后的文件未及时生效,只需在入口页面(默认为start/index.html)中,找到 layui.config ,修改其 version 的值即可。

//开发环境
version: new Date().getTime() //刷新页面,都会更新一次缓存 //生产环境
version: '1.2.0' //每次发布项目时,跟着改动下该属性值即可更新静态资源的缓存

动态模板中的 select 正确用法

当试图用动态模板输出 <select>元素 的 <option></option> 时,务必注意不要将动态模板结构放在 select 内部,而应该将 select 整体放在动态模板内,然后在遍历输出 option,如:

<script type="text/html" lay-url="" template>
<select name="" lay-filter="">
{{# layui.each(d, function(index, item){ }}
<option value="{{ item.value }}">{{ item.title }}</option>
{{# }); }}
</select>
</script>

由于 select 标签的特殊性,很多人将 <script type="text/html" lay-url="" template> </script> 放在了 select 标签的里面,导致无法正确输出相应视图,所以请务必纠正写法。

刷新动态模板

需要对一个已经渲染完毕的动态模板再次进行刷新,可以借助 view 模块的 refresh 方法

<script type="text/html" id="testID" template lay-url="" lay-data="" lay-done="">
<div lay-templateid="testID"> <!-- 注意:此处 lay-templateid 属性值需要与模版定义的 ID 值一致 -->
内容放此处
</div>
</script>

然后在需要执行模版刷新的地方执行

view('testID').refresh();

设置 table 的 token

尽管 admin.req() 方法会自动传递 token,但 layui 中涉及到接口请求的公共组件(如:table、upload)并不走 admin.req(),这时就需要你获取本地存储的 token 赋值给接口参数,方式如下:

方式一:设置单个 table 实例的 token

//设置单个 table 实例的请求 token
table.render({
elem: '#xxxx'
,url: 'url'
,headers: { //通过 request 头传递
access_token: layui.data('layuiAdmin').access_token
}
,where: { //通过参数传递
access_token: layui.data('layuiAdmin').access_token
}
});

方式二:设置全局 table 实例的 token(推荐

//所有 table 实例均会有效,这样就不用在每个 table.render() 都设置一次 token
table.set({
headers: { //通过 request 头传递
access_token: layui.data('layuiAdmin').access_token
}
,where: { //通过参数传递
access_token: layui.data('layuiAdmin').access_token
}
});
  • 一般情况,结合实际需求,headers 和 where 二者中设置一个即可。
  • 这里 access_token 的命名对应 config.js 定义的 tokenName 的值
  • 目前upload组件没有全局设置的方法,需自行添加

设置 layedit 富文本编辑器的上传图片 token 或 额外参数

需要使用到富文本编辑器,用了layui自带的layedit,不过上传图片时报错:“请求上传接口异常”,因接口需要携带token和额外参数,修改如下:

layedit.set({
uploadImage: {
url: setter.api_url + '/admin/slide/upload'
, headers: {AccessToken: layui.data(setter.tableName).AccessToken} //这里增加headers
, data: {} //增加携带data
}
});

注意: layedit.set 放在 layedit.build 前面的任意位置即可

找到layui-src/dist/layer/modules/layedit.js,复制解压缩,搜索 uploadImage,修改为:

o.render({
url: r.url
, method: r.type
, elem: e(n).find("input")[0]
, headers: r.headers //增加携带headers,或者也可以携带data
, data: r.data //增加携带data
, done: function (e) {
0 == e.code ? (e.data = e.data || {}, v.call(t, "img", {
src: e.data.src, alt: e.data.title
}, a)) : i.msg(e.msg || "上传失败")
}
})

作者:旧旧的 <393210556@qq.com> 解决问题的方式,就是解决它一次

layuiAdmin (单页版)常见问题与解决方案的更多相关文章

  1. ThinkPHP6.0 多应用模式 部署 Layuiadmin 单页版

    TP6.0中的路由省略应用名只能用入口文件绑定应用 和 域名绑定应用,经过测试,最后得出域名绑定应用是最合适的部署方式.如果有更好的部署方案,欢迎分享.QQ:23426945 1. 下载TP6.0,引 ...

  2. 单应用模式 - Layuiadmin单页版放入TP6.0的部署方案

    thinkphp6.0.3单应用模式.layuiadmin1.4.0单页版,不需要tp的视图驱动 1. 复制 src.start 两个文件夹 2. 粘贴到 thinkphp 的 public 目录下 ...

  3. LayuiAdmin 单页版关闭当前页面tab的方式-图文

    需要关闭的时候 调用 parent.layui.admin.events.closeThisTabs() 即可执行当前页面的关闭 $.post("/index.php/WebAdmin/Wx ...

  4. layuiAdmin pro v1.x 【单页版】开发者文档

    layuiAdmin std v1.x [iframe版]开发者文档 题外 该文档适用于 layuiAdmin 专业版(单页面),阅读之前请务必确认是否与你使用的版本对应. 熟练掌握 layuiAdm ...

  5. 前端 SPA 单页应用数据统计解决方案 (ReactJS / VueJS)

    前端 SPA 单页应用数据统计解决方案 (ReactJS / VueJS) 一.百度统计的代码: UV PV 统计方式可能存在问题 在 SPA 的前端项目中 数据统计,往往就是一个比较麻烦的事情,Re ...

  6. 构建单页Web应用

    摘自前端农民工的博客 让我们先来看几个网站: coding teambition cloud9 注意这几个网站的相同点,那就是在浏览器中,做了原先“应当”在客户端做的事情.它们的界面切换非常流畅,响应 ...

  7. 构建单页Web应用——简单概述

    一.开发框架 ExtJS可以称为第一代单页应用框架的典型,它封装了各种UI组件,用户主要使用JavaScript来完成整个前端部分,甚至包括布局.随着功能逐渐增加,ExtJS的体积也逐渐增大,即使用于 ...

  8. 高效开发 Web 单页应用解决方案

    于 2017 年初,有在 Github 建立并维护一个项目:Vue Boilerplate Template,欲成就一款开箱即用 Vue + Webpack 的脚手架模版:其目标与宗旨是:根据以往经验 ...

  9. 前端单页应用SEO解决方案

    在这里只会提到Google的解决方案,日后再补充百度的解决方案 我们经常使用的单页都是#!来做应用的前端路由,因为这个在多个版本浏览器上有很好的兼容性 当Google发现URL里有#!符号,Googl ...

随机推荐

  1. The Preliminary Contest for ICPC China Nanchang National Invitational

    目录 Contest Info Solutions A. PERFECT NUMBER PROBLEM D. Match Stick Game G. tsy's number H. Coloring ...

  2. TensorFlow(十八):从零开始训练图片分类模型

    (一):进入GitHub下载模型-->下载地址 因为我们需要slim模块,所以将包中的slim文件夹复制出来使用. (1):在slim中新建images文件夹存放图片集 (2):新建model文 ...

  3. 如何用Python删除一个文件?

    删除文件 path,删除时候如果path是一个目录, 抛出 OSError错误. remove() 同 unlink() 的功能是一样的 os.remove('a.txt') 如果remove文件夹就 ...

  4. 详解JDBC对象

    1. DriverManager (1) 注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 真正注册驱动的是驱动包下 jdbc 文件夹 ...

  5. 《Glibc内存管理》笔记DAY3

    目录 边界标记法 内容来源 边界标记法 /* conversion from malloc headers to user pointers, and back */ #define chunk2me ...

  6. Collections用法总结

    Collections是一个包装类,其中包含有各种有关集合操作的静态多态方,比如可以作用在List和Set上,此类不能实例化. 排序Integer[] array = new Integer[]{3, ...

  7. GitHub回退到某个commit版本

    首先查看commit日志 git log 复制你想回退到的commit版本的commit_id,也就是图中圈出来的一大串字符. 将本地回退 git reset --hard commit_id 将远程 ...

  8. Get Argument Values From Linq Expression

    Get Argument Values From Linq Expression If you even find yourself unpacking an expression in C#, yo ...

  9. Flutter移动电商实战 --(52)购物车_数据模型建立和Provide修改

    根据json数据生成模型类 {"goodsId":"2171c20d77c340729d5d7ebc2039c08d","goodsName" ...

  10. Send me - PLANETSHAKERS

      Send me i will go 送我,我会去 send me i will go 送我,我会 to this city, to this nations 为这城市 为这国家 and to th ...