视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
layui怎么使用
2020-11-27 15:02:01 责编:小采
文档


如果你想了解更多关于layui的知识,可以点击:layui教程

先看下Layui的介绍:

  layui 是一款采用自身模块规范编写的情怀级前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用。其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到API的每一处细节都经过精心雕琢,非常适合界面的快速开发。layui 首个版本发布于2016年金秋,她区别于那些基于MVVM底层的UI框架,却并非逆道而行,而是信奉返璞归真之道。准确地说,她更多是为服务端程序员量身定做,你无需涉足各种前端工具的复杂配置,只需面对浏览器本身,让一切你所需要的元素与交互,从这里信手拈来。layui 兼容人类正在使用的全部浏览器(IE6/7除外),可作为PC端后台系统与前台界面的速成开发方案。

获取Layui

  可以 官网首页 下载到 layui 的最新版,它经过了自动化构建,更适合用于生产环境。目录结构如下:

 ├─css //css目录
 │ │─modules //模块css目录(一般如果模块相对较大,我们会单独提取,比如下面三个:)
 │ │ ├─laydate
 │ │ ├─layer
 │ │ └─layim
 │ └─layui.css //核心样式文件
 ├─font //字体图标目录
 ├─images //图片资源目录(目前只有layim和编辑器用到的GIF表情)
 │─lay //模块核心目录
 │ └─modules //各模块组件
 │─layui.js //基础核心库
 └─layui.all.js //包含layui.js和所有模块的合并文件

快速上手

获得 layui 后,将其完整地部署到你的项目目录(或静态资源服务器),你只需要引入下述两个文件:

./layui/css/layui.css
./layui/layui.js //提示:如果是采用非模块化方式(最下面有讲解),此处可换成:./layui/layui.all.js

  你只需要加载这两个文件,不用去管其他任何文件。因为他们(比如各模块)都是在最终使用的时候才会自动加载。这是一个基本的入门页面;

模块化方式

  我们推荐你遵循 layui 的模块规范建立一个入口文件,并通过 layui.use() 方式来加载该入口文件,如下所示:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 <title>开始使用layui</title>
 <link rel="stylesheet" href="../layui/css/layui.css">
</head>
<body>
 
<!-- 你的HTML代码 -->
 
<script src="../layui/layui.js"></script>
<script>
//一般直接写在一个js文件中
layui.use(['layer', 'form'], function(){
 var layer = layui.layer
 ,form = layui.form;
 
 layer.msg('Hello World');
});
</script> 
</body>
</html>

非模块化方式(即所有模块一次性加载)

  如果你并不喜欢 layui 的模块化组织方式,你完全可以毅然采用“一次性加载”的方式,我们将 layui.js 及所有模块单独打包合并成了一个完整的js文件,用的时候直接引入这一个文件即可。当你采用这样的方式时,你无需再通过 layui.use() 方法加载模块,直接使用即可,如:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 <title>非模块化方式使用layui</title>
 <link rel="stylesheet" href="../layui/css/layui.css">
</head>
<body>
 
<!-- 你的HTML代码 -->
 
<script src="../layui/layui.all.js"></script>
<script>
//由于模块都一次性加载,因此不用执行 layui.use() 来加载对应模块,直接使用即可:
;!function(){
 var layer = layui.layer
 ,form = layui.form;
 
 layer.msg('Hello World');
}();
</script> 
</body>
</html>

模块化与非模块化

  我还是比较喜欢模块化这个概念,需要的时候就加载,因为假如是非模块化的话,一开始就是加载全部js文件,但实际上有些页面用到模块可能很少,并不需要加载这么大的js文件,所以还是推荐使用模块化的方式。非模块化虽然方便,还是对用户其实不太友好的。

模块规范

  layui 的模块是基于 layui.js 内部实现的异步模块加载方式,它并不遵循于AMD(没有为什么,毕竟任性呀!),而是自己定义了一套更轻量的模块规范。并且这种方式在经过了大量的实践后,成为 layui 最核心的模块加载引擎。

预先加载

  开门见山,还是直接说使用比较妥当。Layui的模块加载采用核心的 layui.use(mods, callback)方法,当你的JS 需要用到Layui模块的时候,我们更推荐你采用预先加载,因为这样可以避免到处写layui.use的麻烦。你应该在最外层如此定义:

/*
 Demo1.js
 使用Layui的form和upload模块
*/
layui.use(['form', 'upload'], function(){ //如果只加载一个模块,可以不填数组。如:layui.use('form')
 var form = layui.form //获取form模块
 ,upload = layui.upload; //获取upload模块
 
 //监听提交按钮
 form.on('submit(test)', function(data){
 console.log(data);
 });
 
 //实例化一个上传控件
 upload({
 url: '上传接口url'
 ,success: function(data){
 console.log(data);
 }
 })
});

按需加载(不推荐)

  如果你有强迫症,你对网站的性能有极致的要求,你并不想预先加载所需要的模块,而是在触发一个动作的时候,才去加载模块,那么,这是允许的。你不用在你的JS最外层去包裹一个大大的 layui.use,你只需要:

/*
 Demo2.js
 按需加载一个Layui模块
*/
 
//……
//你的各种JS代码什么的
//……
 
//下面是在一个事件回调里去加载一个Layui模块
button.addEventListener('click', function(){
 layui.use('laytpl', function(laytpl){ //温馨提示:多次调用use并不会重复加载laytpl.js,Layui内部有做模块cache处理。
 var html = laytpl('').render({});
 console.log(html);
 });
});

  注意:如果你的JS中需要大量用到模块,我们并不推荐你采用这种加载方式,因为这意味着你要写很多layui.use(),代码可维护性不高。
  建议还是采用:预先加载。即一个JS文件中,写一个use即可。

模块命名空间

  Layui的全部模块绑定在 layui对象下,内部由layui.define()方法来完成。每一个模块都会一个特有的名字,并且无法被占用。所以你无需担心模块的空间被污染,除非是你 delete layui.mod; 调用一个模块也必须借助layui对象的赋值。如:

layui.use(['layer', 'laypage', 'laydate'], function(){
 var layer = layui.layer //获得layer模块
 ,laypage = layui.laypage //获得laypage模块
 ,laydate = layui.laydate; //获得laydate模块
 
 //使用模块
});

  一个模块一旦加载后,就会注册在layui对象下,所以你无法直接用模块名来获得,而同样借助layui对象。譬如有时你可能会直接在元素的事件属性上去调用一个模块,如:

<input onclick="layui.laydate()">

扩展一个Layui模块

  layui 官方提供的模块有时可能还无法满足你,或者你试图按照layer的模块规范来扩展一个模块。那么你有必要认识layui.define()方法,相信你在文档左侧的“底层方法”中已有所阅读。下面就就让我们一起扩展一个Layui模块吧:

  第一步:确认模块名,假设为:test,然后新建一个test.js 文件放入项目任意目录下(注意:不用放入layui目录)

  第二步:编写test.js 如下:

/**
 扩展一个test模块
**/ 
layui.define(function(exports){ //提示:模块也可以依赖其它模块,如:layui.define('layer', callback);
 var obj = {
 hello: function(str){
 alert('Hello '+ (str||'test'));
 }
 };
 //
输出test接口 exports('test', obj); });

  第三步:设定扩展模块所在的目录,然后就可以在别的JS文件中使用了

//config的设置是全局的
layui.config({
 base: '/res/js/' //假设这是test.js所在的目录
}).extend({ //设定模块别名
 test: 'test' //如果test.js是在根目录,也可以不用设定别名
 ,test1: 'admin/test1' //相对于上述base目录的子目录
});
 
//使用test
layui.use('test', function(){
 var test = layui.test;
 
 test.hello('World!'); //弹出Hello World!
});
//使用test1
layui.use('test1', function(){
 var test = layui.test1;
 
 //……
});

大体上来说,Layui的模块定义很类似Require.js和Sea.js,但跟他们又有着明显的不同,譬如在接口输出等地方。

下载本文
显示全文
专题