首頁 > web前端 > js教程 > Require.js圖文詳解

Require.js圖文詳解

php中世界最好的语言
發布: 2018-04-16 17:31:20
原創
1558 人瀏覽過

這次帶給大家Require.js圖文詳解,使用Require.js的注意事項有哪些,下面就是實戰案例,一起來看一下。

一、為什麼要使用require.js

首先一個頁面如果在載入多個js檔案的時候,瀏覽器會停止網頁渲染,載入檔案越多,網頁失去回應的時間就會越長;其次,由於js檔案之間存在依賴關係,因此必須嚴格保證載入順序,當依賴關係很複雜的時候,程式碼的編寫和維護都會變得困難。

require.js,就是為了解決這兩個問題:

# 1. 實作js檔案的非同步加載,避免網頁失去回應;
2. 管理模組之間的依賴性,便於程式碼的編寫和維護。

二、require.js的載入

第一步,到官網下載最新版本,直接放到頁面載入

<script src="js/require.js"></script>
登入後複製

載入這個檔案可能會導致網頁失去回應,可以將它放到頁面的底部加載,也可以這樣寫

<script src="js/require.js" defer async="true" ></script>
登入後複製

async屬性表明這個檔案需要非同步加載,避免網頁失去回應。 IE不支援這個屬性,只支援defer,所以把defer也寫上。

載入require.js以後,下一步就要載入我們自己的程式碼了,也就是入口,可以叫主模組,如果檔案叫做main.js,寫成下面這樣就可以了:

<script src="js/require.js" data-main="js/main"></script>  .js后缀可以省略
登入後複製

# 三、主模組的寫法

# 如果主模組依賴jQuery可以這樣寫

require(['jquery'], function ($){ 
   alert($); 
});
登入後複製

四、require.config()方法

require.config({ 
  paths: { 
    "jquery": "jquery.min", 
    "underscore": "underscore.min", 
    "backbone": "backbone.min"
  } 
});
登入後複製

上面的程式碼給了三個模組的檔名,路徑預設與main.js在同一個目錄(js子目錄)。如果這些模組在其他目錄,例如js/lib目錄,則有兩種寫入方法。

• 一種是逐一指定路徑

require.config({ 
  paths: { 
    "jquery": "lib/jquery.min", 
    "underscore": "lib/underscore.min", 
    "backbone": "lib/backbone.min"
  } 
});
登入後複製

• 另一種則是直接改變基底目錄(baseUrl)。

require.config({ 
  baseUrl: "js/lib", 
  paths: { 
    "jquery": "jquery.min", 
    "underscor: "underscore.min", 
    "backbone": "backbone.min" 
  } 
});
登入後複製

• 如果某個模組在另一台主機上,也可以直接指定它的網址,例如

require.config({ 
  paths: { 
    "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
  } 
});
登入後複製

五、AMD模組的寫法

require.js載入的模組,採用AMD規格。也就是說,模組必須按照AMD的規定來寫。

具體來說,就是模組必須採用特定的define()函數來定義。如果一個模組不依賴其他模組,那麼可以直接定義在define()函數之中。

// math.js 
define(function (){ 
  var add = function (x,y){ 
    return x+y; 
  }; 
  return { 
    add: add 
  }; 
});
登入後複製

載入方法如下:

 // main.js 
require(['math'], function (math){ 
  alert(math.add(1,1)); 
});
登入後複製

如果這個模組也依賴其他模組,那麼define()函數的第一個參數,必須是數組,指明該模組的依賴性。

define(['myLib'], function(myLib){ 
  function foo(){ 
    myLib.doSomething(); 
  } 
  return {  //返回模块中的函数 
    foo : foo 
  }; 
});
登入後複製

當require()函數載入上面這個模組的時候,就會先載入myLib.js檔。

六、載入非規範的模組(shim的使用方式)

// app.js 
 function sayHello(name){ 
  alert('Hi '+name); 
}
登入後複製
// main.js 
require.config({ 
  shim: { 
    'app': { //这个键名为要载入的目标文件的文件名,不能随便命名。 
      exports: 'sayHello' //exports的值为my.js提供的 对外接口的名称 
    } 
  } 
}); 
 
require(['app'], function(sayHello) { 
 alert(sayHello()) 
})
登入後複製

導出一個函數,意味著我們得到了一個javaScript類別

# 但如果在my.js寫了很多fun​​ction,整合成function有點麻煩,想直接導出?方法如下:

// app.js 
function sayHi(name){ 
 alert('Hi '+name); 
} 
function sayHello(name){ 
 alert('Hiello '+name); 
}
登入後複製
// main.js 
  require.config({ 
    shim: { 
      app: { 
        init: function() { //这里使用init将2个接口返回 
          return { 
            sayHi: sayHi, 
            sayHello: sayHello 
          } 
        } 
      } 
    } 
  }); 
 
  require(['app'], function(a) { 
    a.sayHi('zhangsan'); 
    a.sayHello('lisi'); 
  });
登入後複製

shim的有序導入

require.config({ 
 
 shim: { 
    'jquery.ui.core': ['jquery'], //表示在jquery导入之后导入 
    'jquery.ui.widget': ['jquery'], 
    'jquery.ui.mouse': ['jquery'], 
    'jquery.ui.slider':['jquery'] 
   }, 
 paths : {  
  jquery : 'jquery-2.1.1/jquery',  
  domReady : 'require-2.1.11/domReady',  
  'jquery.ui.core' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.core',  
  'jquery.ui.widget' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.widget',  
  'jquery.ui.mouse' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.mouse',  
  'jquery.ui.slider' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.slider' 
  } 
  });  
 
  require(['jquery', 'domReady','jquery.ui.core','jquery.ui.widget','jquery.ui.mouse','jquery.ui.slider'], function($) {    
   $("#slider" ).slider({    
    value:0,   
    min: 0,   
    max: 4,   
    step: 1,   
    slide: function( event, ui ) {}  
     });  
   });
登入後複製

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:



#

以上是Require.js圖文詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板