首页 > 其他分享 >Layui官网模块规范

Layui官网模块规范

时间:2024-01-03 18:33:25浏览次数:36  
标签:use laydate Layui js 模块 layui 官网 mymod

预先加载模块

layui 通过 use 方法加载模块。当你的 JS 需要用到 layui 模块的时候,且避免到处写 layui.use() 的麻烦。你应该在最外层如此定义:

</>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);
     }
   })
 });

模块命名空间

layui 的模块对象会绑定在 layui 对象下,内部由 layui.define() 方法来完成。每个模块都有一个特定命名,且无法被占用。所以你无需担心模块的空间被污染,除非你主动 delete layui['模块名']。调用模块可通过 layui.use() 来实现,再通过 layui 对象获得模块对象。如:

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

我们推荐你将所有的业务代码都写在一个大的 use 回调中,而不是将模块接口暴露给全局,比如下面的方式我们是极不推荐的:

</>//强烈不推荐下面的做法
 var laypage, laydate;
 layui.use(['laypage', 'laydate'], function(){
   laypage = layui.laypage;
   laydate = layui.laydate;
 });

你之所以想使用上面的错误方式,是想其它地方使用不在执行一次 layui.use?但这种理解本身是存在问题的。因为如果一旦你的业务代码是在模块加载完毕之前执行,你的全局对象将获取不到模块接口,因此这样用不仅不符合规范,还存在报错风险。建议在你的 js 文件中,在最外层写一个 layui.use 来加载所依赖的模块,并将业务代码写在回调中,这样还可以确保 html 文档加载完毕再执行回调代码。

扩展一个 layui 模块

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

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

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

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

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

</>//config的设置是全局的
 layui.config({
   base: '/res/js/' //假设这是你存放拓展模块的根目录
 }).extend({ //设定模块别名
   mymod: 'mymod' //如果 mymod.js 是在根目录,也可以不用设定别名
   ,mod1: 'admin/mod1' //相对于上述 base 目录的子目录
 });
  
 //你也可以忽略 base 设定的根目录,直接在 extend 指定路径(主要:该功能为 layui 2.2.0 新增)
 layui.extend({
   mod2: '{/}http://cdn.xxx.com/lib/mod2' // {/}的意思即代表采用自有路径,即不跟随 base 路径
 })
  
 //使用拓展模块
 layui.use(['mymod', 'mod1'], function(){
   var mymod = layui.mymod
   ,mod1 = layui.mod1
   ,mod2 = layui.mod2;
   
   mymod.hello('World!'); //弹出 Hello World!
 });

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

结语

其实关于模块的核心,就是 layui.js 的两个底层方法:一个用于定义模块的 layui.define(),一个加载模块的 layui.use()

layui - 在每一个细节中,用心与你沟通

标签:use,laydate,Layui,js,模块,layui,官网,mymod
From: https://blog.51cto.com/u_16308706/9087550

相关文章

  • DC电源模块在工业自动化中的关键应用案例分析
    BOSHIDADC电源模块在工业自动化中的关键应用案例分析DC电源模块在工业自动化中有多种关键应用,以下是几个案例分析:传感器供电:在工业自动化中,许多传感器需要使用直流电源进行供电。传感器可以是温度传感器、压力传感器、测流传感器等等。DC电源模块可以为这些传感器提供稳定的直流电......
  • jmeter module模块控制器
    ModuleController模块控制器:方便测试代码的复用、维护ModuleController的目标参数介绍控制运行测试片段新建测试片段新增ModuleController使用模块控制器调用测试片段引入当前测试计划引入另一个线程组的测试片段模块控制器(ModuleController)提供了......
  • elixr 本地模块引用
    elixir的mix支持引用本地模块,以下是一个简单的学习参考使用项目结构├──app│├──README.md│├──lib││└──app.ex│├──mix.exs│└──test│├──app_test.exs│└──test_helper.exs└──login├──......
  • rebar3 集成elixir 模块
    社区包含了一个rebar3的elixirmix插件,可以方便rebar使用elixir模块参考使用rebar.config配置{erl_opts,[debug_info]}.{deps,[%添加引用{decimal,"2.0.0"}]}.{shell,[{apps,[basic]}]}.%添加插件{plugins,[rebar_mix]}.{provider_hooks,[{......
  • Lumen框架 之Layui权限管理系统
    一、效果图二、地址https://gitee.com/yang1015/lumen-rbac......
  • Firefox 110, Chrome 110, Chromium 110 官网离线下载 (macOS, Linux, Windows)
    MozillaFirefox,GoogleChrome,Chromium,AppleSafari作者主页:www.sysin.org天下只剩三种(主流)浏览器:AppleSafariMozillaFirefoxGoogleChrome(Chromium)【国外各种(MicrosoftEdge、Opera…),国产各种…】Safari下载:AppleSafari16.3-macOS专属浏览器(独立安装包下载)如何屏......
  • 前端歌谣-第四拾柒课-node之http模块之爬虫
    前言我是歌谣微信公众号关注前端小歌谣一起学习前端知识今天继续给大家讲解node中爬虫的讲解安装npminit-ynpmicheerio案例varhttp=require("http")varurl=require("url")varhttps=require("https")varcheerio=require("cheerio")http.createServer((req,res)=>{......
  • 前端歌谣-第四拾捌课-node之http模块之event模块
    前言我是歌谣微信公众号关注前端小歌谣一起学习前端知识今天继续给大家讲解node中event的讲解案例constEventEmitter=require("events")constevent=newEventEmitter()event.on("play",()=>{console.log("事件触发了")})event.emit("play")运行结果案例1varhttp=r......
  • Python模块之hashlib模块
    hashlib模块【一】概要hashlib模块是Python中提供对哈希算法的支持的模块。它提供了常见的哈希算法,如MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512,以及一些其他哈希算法。【二】常见用法计算哈希值:hashlib.md5():创建一个MD5哈希对象。hashlib.sha1():创......
  • 【Qt之Quick模块】7. Quick基础、常用组件Item、Rectangle、Text、TextInput、TextEdi
    1.概述QtQuick模块是编写QML应用程序的标准库。QtQML模块提供QML引擎和语言基础结构,QtQuick模块提供用QML创建用户界面所需的所有基本类型。它提供了一个可视化画布,包括用于创建和动画化可视化组件、接收用户输入、创建数据模型和视图以及延迟对象实例化的类型。QtQuick模块......