AngularJS中的按需加載ocLazyLoad示例
一、前言
ocLoayLoad是AngularJS的模塊按需加載器。一般在小型項(xiàng)目里,首次加載頁(yè)面就下載好所有的資源沒(méi)有什么大問(wèn)題。但是當(dāng)我們的網(wǎng)站漸漸龐大起來(lái),這樣子的加載策略讓網(wǎng)速初始化速度變得越來(lái)越慢,用戶(hù)體驗(yàn)不好。二來(lái),分模塊加載易于團(tuán)隊(duì)協(xié)作,減低代碼沖突。
二、按需加載的對(duì)象
各個(gè)Controller模塊、Directive模塊、Server模塊、template模板,其實(shí)這些都是一些 .js文件或者 .html文件 。
三 、按需加載的場(chǎng)景
1 路由加載(resolve/uiRouter)
基于uiRouter的resolve是在加載controller和template之前所執(zhí)行的一系列操作,它幫助我們初始化我們所要前往的那一個(gè)視圖。只有be solved(操作完成),controller才會(huì)被實(shí)例化。因此,我們可以在resolve步驟里面加載我們所需要的controller。
$stateProvider
.state('index', {
url: '/',
views: {
'lazyLoadView': {
templateUrl: 'partials/main.html',
controller: 'AppCtrl'
}
},
resolve: {
loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad){
return $ocLazyLoad.load('js/AppCtrl.js')
}]
}
})
其中,'js/AppCtrl.js'里面放著一個(gè)我們所需要的controller
angular.module('myApp')
.controller('AppCtrl', ['$scope', function($scope){
//...
}])
2 依賴(lài)加載
在依賴(lài)項(xiàng)里面導(dǎo)入我們所需要的一系列模塊(這里有一層'[ ]'符合哦)
angular.module('gridModule', [[
'bower_components/angular-ui-grid/ui-grid.js',
'bower_components/angular-ui-grid/ui-grid.css'
]]).controller('GridModuleCtrl', ['$scope', function($scope){
//...
}])
3 Cotroller里動(dòng)態(tài)加載
angular.module('myApp')
.controller('AppCtrl', ['$scope','$ocLazyLoad', function($scope, $ocLazyLoad){
$scope.loadBootstrap = function(){
$ocLazyLoad.load([
'bower_components/bootstrap/dist/js/bootstrap.js',
'bower_components/bootstrap/dist/css/bootstrap.css'
])
}
var unbind = $scope.$on('ocLazyLoad.fileLoaded', function(e, file){
$scope.bootstrapLoaded = true;
console.log('下載boot完成');
unbind();
})
}])
4 template包含加載(config)
如何處理我們所加載的html模板里面嵌套的controller呢?這里需要oc-lazy-load指令和$ocLazyLoadProvider的配置
/*template A.html*/
<h1>hi i am hzp </h1>
<div oc-lazy-load="gridModule">
<div ng-controller="GridModuleCtrl">
<span>{{test}}</span><br/>
<div ui-grid="gridOptions" class="gridStyle"></div>
</div>
</div>
</div>
$ocLazyLoadProvider.config({
modules: [{
name: 'gridModule',
files: [
'js/gridModule.js'
]
}]
})
四、如何組織按需加載
分路由、按功能來(lái)區(qū)分、打包成不同的多個(gè)或單個(gè)controller.directive.server模塊
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解AngularJS通過(guò)ocLazyLoad實(shí)現(xiàn)動(dòng)態(tài)(懶)加載模塊和依賴(lài)
- angularjs ocLazyLoad分步加載js文件實(shí)例
- JS實(shí)現(xiàn)圖片延遲加載并淡入淡出效果的簡(jiǎn)單方法
- Webpack 實(shí)現(xiàn) AngularJS 的延遲加載
- AngularJS中的Directive實(shí)現(xiàn)延遲加載
- javascript實(shí)現(xiàn)圖片延遲加載方法匯總(三種方法)
- js實(shí)現(xiàn)延遲加載的方法
- 關(guān)于延遲加載JavaScript
- 淺析js預(yù)加載/延遲加載
- AngularJS使用ocLazyLoad實(shí)現(xiàn)js延遲加載
相關(guān)文章
基于AngularJS實(shí)現(xiàn)的工資計(jì)算器實(shí)例
這篇文章主要介紹了基于AngularJS實(shí)現(xiàn)的工資計(jì)算器,結(jié)合具體實(shí)例形式分析了AngularJS數(shù)值計(jì)算相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Angular2.js實(shí)現(xiàn)表單驗(yàn)證詳解
這篇文章主要介紹了Angular2.js實(shí)現(xiàn)表單驗(yàn)證的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
AngularJS實(shí)現(xiàn)的省市二級(jí)聯(lián)動(dòng)功能示例【可對(duì)選項(xiàng)實(shí)現(xiàn)增刪】
這篇文章主要介紹了AngularJS實(shí)現(xiàn)的省市二級(jí)聯(lián)動(dòng)功能,涉及事件監(jiān)聽(tīng)、響應(yīng)及頁(yè)面元素動(dòng)態(tài)操作相關(guān)技巧,此外還具備對(duì)選項(xiàng)進(jìn)行增刪的功能,需要的朋友可以參考下2017-10-10
詳解AngularJS跨頁(yè)面?zhèn)髦担╱i-router)
本篇文章主要介紹了詳解AngularJS跨頁(yè)面?zhèn)髦担╱i-router),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
AngularJS中實(shí)現(xiàn)用戶(hù)訪問(wèn)的身份認(rèn)證和表單驗(yàn)證功能
這篇文章主要介紹了AngularJS中實(shí)現(xiàn)用戶(hù)訪問(wèn)的身份認(rèn)證及表單驗(yàn)證功能的方法,Angular是Google開(kāi)發(fā)的一款瀏覽器端的高人氣JavaScript框架,需要的朋友可以參考下2016-04-04
用AngularJS來(lái)實(shí)現(xiàn)監(jiān)察表單按鈕的禁用效果
本篇文章主要介紹了用AngularJS來(lái)實(shí)現(xiàn)監(jiān)察表單按鈕的禁用效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
AngularJS基于provider實(shí)現(xiàn)全局變量的讀取和賦值方法
這篇文章主要介紹了AngularJS基于provider實(shí)現(xiàn)全局變量的讀取和賦值方法,結(jié)合實(shí)例形式分析了AngularJS全局變量的聲明、賦值、讀取等相關(guān)使用技巧,需要的朋友可以參考下2017-06-06

