AngularJS動(dòng)態(tài)加載模塊和依賴的方法分析
本文實(shí)例講述了AngularJS動(dòng)態(tài)加載模塊和依賴的方法。分享給大家供大家參考,具體如下:
前言
由于AngularJS是單頁面應(yīng)用框架,在正常的情況下,會(huì)在訪問頁面的時(shí)候?qū)⑺械腃SS、JavaScript文件都加載進(jìn)來。文件不多的時(shí)候,頁面啟動(dòng)速度倒不會(huì)影響太多。但是一旦文件數(shù)太多或者加載的第三方庫比較大的時(shí)候,就會(huì)影響頁面啟動(dòng)速度。因此對(duì)于應(yīng)用規(guī)模大、文件數(shù)比較多或者加載的第三方庫比較大的時(shí)候,采用動(dòng)態(tài)加載JS或者動(dòng)態(tài)加載模塊會(huì)極大提升頁面的啟動(dòng)速度。本文將介紹如何利用ocLazyLoad實(shí)現(xiàn)動(dòng)態(tài)加載。
準(zhǔn)備
AngularJS動(dòng)態(tài)加載依賴第三方庫:ocLazyLoad。ocLazyLoad是一個(gè)第三方庫,支持AngularJS動(dòng)態(tài)加載module、service、directive以及靜態(tài)文件。
安裝ocLazyLoad
可通過npm或者bower進(jìn)行安裝
npm install oclazyload bower install oclazyload
將ocLazyLoad module 添加到你的應(yīng)用中
angular.module('myApp',['oc.lazyLoad']);
配置 ocLazyLoad
你可以在 config函數(shù)中配置 $ocLazyLoadProvider,配置文件如下
.config(['$ocLazyLoadProvider', function($ocLazyLoadProvider){
$ocLazyLoadProvider.config({
debug: true,
events: true,
modules: [
{
name: 'TestModule',
files: ['test.js']
}
]
})
}])
debug: 用來開啟debug模式。布爾值,默認(rèn)是false。當(dāng)開啟debug模式時(shí),$ocLazyLoad會(huì)打印出所有的錯(cuò)誤到console控制臺(tái)上。
events:當(dāng)你動(dòng)態(tài)加載了module的時(shí)候,$ocLazyLoad會(huì)廣播相應(yīng)的事件。布爾值,默認(rèn)為false。
modules:用于定義你需要?jiǎng)討B(tài)加載的模塊。定義每個(gè)模塊的名字需要唯一。
modules必須要用數(shù)組的形式,其中files也必須以數(shù)組的形式存在,哪怕只需要加載一個(gè)文件
在路由當(dāng)中加載module
.config(['$routeProvider', function($routeProvider) {
$routeProvider.otherwise('/index');
$routeProvider.when('/index', {
templateUrl: 'index.html',
controller: 'IndexController',
resolve: { // resolve 里的屬性如果返回的是 promise對(duì)象,那么resolve將會(huì)在view加載之前執(zhí)行
loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad) {
// 在這里可以延遲加載任何文件或者剛才預(yù)定義的modules
return $ocLazyLoad.load('TestModule'); //加載剛才定義的TestModule
/*return $ocLazyLoad.load([ // 如果要加載多個(gè)module,需要寫成數(shù)組的形式
'TestModule',
'MainModule'
]);*/
}]
}
})
}])
resolve設(shè)置的屬性可以被注入到Controller當(dāng)中。如果resolve返回的是promise對(duì)象的話,那么它們將在控制器加載以及$routeChangeSuccess被觸發(fā)之前執(zhí)行。
$ocLazyLoad就是利用這個(gè)原理hack,進(jìn)行動(dòng)態(tài)加載。
resolve的值可以是:
* key,the value of key 是會(huì)被注入到Controller的依賴的名字;
* factory,即可以是一個(gè)service的名字,也可以是一個(gè)返回值,它是會(huì)被注入到控制器中的函數(shù)或可以被resolve的promise對(duì)象。
通過這樣的配置,就可以實(shí)現(xiàn)了AngularJS動(dòng)態(tài)加載模塊和依賴。但是ocLazyLoad提供的功能更加豐富,不止動(dòng)態(tài)加載模塊和依賴,還能動(dòng)態(tài)加載service,diretive等。更多的功能,可以訪問[ocLazyLoad官網(wǎng)](https://oclazyload.readme.io)
希望本文所述對(duì)大家AngularJS程序設(shè)計(jì)有所幫助。
相關(guān)文章
深究AngularJS中ng-drag、ng-drop的用法
本篇文章主要介紹了深究AngularJS中ng-drag、ng-drop的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
使用Angular CLI生成 Angular 5項(xiàng)目教程詳解
這篇文章主要介紹了使用Angular CLI生成 Angular 5項(xiàng)目的教程詳解 ,需要的朋友可以參考下2018-03-03
AngularJS集合數(shù)據(jù)遍歷顯示的實(shí)例
下面小編就為大家分享一篇AngularJS集合數(shù)據(jù)遍歷顯示的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
angularJS自定義directive之帶參方法傳遞詳解
今天小編就為大家分享一篇angularJS自定義directive之帶參方法傳遞詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
詳解AngularJS中$http緩存以及處理多個(gè)$http請(qǐng)求的方法
$http 是 AngularJS 中的一個(gè)核心服務(wù),用于讀取遠(yuǎn)程服務(wù)器的數(shù)據(jù),通過本文給大家介紹AngularJS中$http緩存以及處理多個(gè)$http請(qǐng)求的方法,希望的朋友一起學(xué)習(xí)吧2016-02-02
AngularJS基礎(chǔ) ng-cut 指令介紹及簡(jiǎn)單示例
本文主要介紹AngularJS ng-cut 指令,這里對(duì)ng-cut指令的基礎(chǔ)資料進(jìn)行了整理,和詳細(xì)介紹,并附上代碼示例和實(shí)現(xiàn)效果圖,學(xué)習(xí)AngularJS 指令的朋友可以參考下2016-08-08
Angular如何在應(yīng)用初始化時(shí)運(yùn)行代碼詳解
這篇文章主要給大家介紹了關(guān)于Angular如何在應(yīng)用初始化時(shí)運(yùn)行代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
關(guān)于AngularJs數(shù)據(jù)的本地存儲(chǔ)詳解
本文主要介紹了每一個(gè)獨(dú)立的JS文件或者不同的控制器如何實(shí)現(xiàn)數(shù)據(jù)的共享與交互的方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
angularjs實(shí)現(xiàn)的前端分頁控件示例
本篇文章主要介紹了angularjs實(shí)現(xiàn)的前端分頁控件示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02

