[layui初探]__ layui基礎說明

  • 前言

在前面的第一篇文章,我們已經進行了layui的初步準備工作以及簡單的使用了,從本篇開始,便正式開始layui的學習.本篇文章主要就layui的基礎說明進行學習,以期加深對layui的認識.另外,所有的學習以及參考資源偶都基于layui官方文檔.

layui文檔


核心方法

layui的底層方法是layui的基礎支撐,是layui.js核心基礎庫中幾個核心的方法,而在這里,暫時只對其中比較重要的模塊定義方法layui.define,模塊加載方法layui.use.以及全局配置方法layui.config進行簡單的總結介紹.其他一些底層方法,比較詳細的內容可以參看官方文檔學習.

  • layui.config(options) 全局配置方法

該方法是一個全局配置方法,在使用模塊之前,進行一些最基本的全局參數配置(在連接外部js模塊文件是會經常使用到)

    layui.config({
      dir: '/res/layui/' //layui.js 所在路徑(注意,如果是script單獨引入layui.js,無需設定該參數。),一般情況下可以無視
      ,version: false //一般用于更新模塊緩存,默認不開啟。設為true即讓瀏覽器不緩存。也可以設為一個固定的值,如:201610
      ,debug: false //用于開啟調試模式,默認false,如果設為true,則JS模塊的節點會保留在頁面
      ,base: '' //設定擴展的Layui模塊的所在目錄,一般用于外部模塊擴展
    });
          

我們看看提供的參數,我們可以發現,我們在使用該方法的時候,基本只會使用到base參數來引入我們的外部js文件,甚至如果我們不按照其模塊規范使用傳統js引入方式的話,我們都不需要設置base參數.

該方法的使用多使用在使用模塊規范來引入外部js文件,使用自定義模塊的時候使用: 我們看一個簡單的例子:

// 通過config方法引入js文件的絕對路徑,只需要導入到對應的目錄下即可.
layui.config({
       base: '/sty_layui/src/js/'
    })
// 通過layui.use('mods',callback)方法加載(調用)js文件夾下對應的mods模塊.
layui.use('sty_module',{}); // 這里第一個mods參數就是需要用到的模塊js文件的名字

當然我們還可以使用下面的方法引入不同級的js文件.并且設置別名:

//config的設置是全局的
layui.config({
  base: '/res/js/' //假設這是你存放拓展模塊的根目錄
}).extend({ //設定模塊別名
  mymod: 'mymod' //如果 mymod.js 是在根目錄,也可以不用設定別名
  ,mod1: 'admin/mod1' //相對于上述 base 目錄的子目錄
});

我們還可以直接使用.extend方法直接引入不更隨base絕對路徑的自定義文件路徑,這種方式通常使用在從靜態資源服務器上獲取js資源文件.

//你也可以忽略 base 設定的根目錄,直接在 extend 指定路徑(主要:該功能為 layui 2.2.0 新增)
layui.extend({
  mod2: '{/}http://cdn.xxx.com/lib/mod2' // {/}的意思即代表采用自有路徑,即不跟隨 base 路徑
})
  • layui.define(['mods'],callback) 模塊定義方法

我們在前面知道layui框架的設計思想是模塊化的,并且可以實現按需加載,預先加載等加載模塊的方式,以求通過這種方式來達到用更輕量級的內容達到更高效的目的.并且其是支持自定義模塊的,自定義模塊的好處在于能夠大量減少代碼的冗雜重復.可以將共用的模塊封裝起來.

我們通過一個例子來看看模塊的定義:

/*外部js文件,將自定義模塊封裝在外部純js文件中.*/
layui.define(function (exports) { 
    var obj = {  // 聲明一個對象,對象體內部用來書寫自定義方法.
        hello: function (str) {
            alert('Hello'+ str);
        }
    };
    exports('mymod',obj);  // exports的兩個參數,第一個用來設置當前模塊的名稱,第二個返回對象obj
});
// define的兩個參數,第一個參數用來聲明當前模塊需要依賴的模塊我們可以不填.
// 第二個參數即為模塊的回調函數,它返回exprots參數,用于輸出該模塊的接口.
layui.define(['layer','form'],function (exports) {

    var obj = {
        hello: function (str) {

            alert('Hello'+ str);
        }
    };
    exports('mymod',obj);
});

  • layui.use(['mods'],callback)加載模塊的方法
    layui的內置模塊都是默認不加載的,必須在執行了該方法后才會被加載(當然前提是你使用的是模塊化),該方法其實幾乎與define方法一樣,用法上沒有什么區別,我們來看看該如何使用上面我們自定義的模塊吧:
// 該方法使用的前提是你已經引入了對應的模塊.
  layui.use('mymod',function () {
        var mod = layui.mymod;
        mod.hello('world');
    });

模塊規范

layui的模塊是基于layui.js內部的異步模塊加載方式,它自己定義一套更輕量的模塊規范,使其在大量的實踐后成為layui最核心的模塊加載引擎.

  • 預先加載
    layui采用的核心加載方法就是layui,use(mods,callback)方法,預先加載,其實就是使用一個大的use方法,將所需的模塊都先加載進來,然后在內部進行操作,這樣會避免到處寫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);
    }
  })
});
  • 按需加載
    按需加載其實就是在具體的控件中的事件回調中直接使用use方法,來達到當使用到該事件的時候,模塊才被加載的目的.來看看例子:
button.addEventListener('click', function(){
  layui.use('laytpl', function(laytpl){ //溫馨提示:多次調用use并不會重復加載laytpl.js,Layui內部有做模塊cache處理。
    var html = laytpl('').render({});
    console.log(html);
  });
});

顯然這種方式并不利于代碼的可讀性和維護性,當你的js代碼較多的時候,這種方式顯然是不明智的.

  • 擴展一個模塊
    layui允許我們隨意拓展自定義模塊.來達到封裝我們自己所需的模塊.拓展方法其實在上面定義模塊中就有講到.參考上面描述.

頁面元素規范

layui提倡返璞歸真,遵循于原生態的元素書寫規則,所以通常而言,你仍然是在寫基本的HTML和CSS代碼,不同的是,在HTML結構上及CSS定義上需要小小遵循一定的規范。

  • css命名規范

class命名前綴:layui,連接符:-,如:class="layui-form"命名格式一般分為兩種:
一:layui-模塊名-狀態或類型,
二:layui-狀態或類型。因為有些類并非是某個模塊所特有,他們通常會是一些公共類。
如:一(定義按鈕的原始風格):class="layui-btn layui-btn-primary"、
二(定義內聯塊狀元素):class="layui-inline"
大致記住這些簡單的規則,會讓你在填充HTML的時候顯得更加得心應手。

  • html規范
  • layui在解析HTML元素的時候,必須充分確保其結構是被支持的:
    <div class="layui-tab">
      <ul class="layui-tab-title">
        <li class="layui-this">標題一</li>
        <li>標題二</li>
        <li>標題三</li>
      </ul>
      <div class="layui-tab-content">
        <div class="layui-tab-item layui-show">內容1</div>
        <div class="layui-tab-item">內容2</div>
        <div class="layui-tab-item">內容3</div>
      </div>
    </div> 

如果改變了結構,極有可能會導致Tab功能失效。所以在嵌套HTML的時候,你應該細讀各個元素模塊的相關文檔.

  • 常用公共屬性.

很多時候,元素的基本交互行為,都是由模塊自動開啟。但不同的區域可能需要觸發不同的動作,這就需要你設定我們所支持的自定義屬性來作為區分。如下面的 lay-submit、lay-filter即為公共屬性.

image.png

更新時間:
2019-6-12
15:26

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容