按需加載估計是大家在使用angular之后最想解決的問題吧,因為angular的依賴機制,導致了必須在第一次加載的時候就加載所有js文件,小項目還好,稍大一點的項目如果有上百個js文件,不管是從效率還是寫法都相當不好。所以這次我使用了$ocLazyLoad來實現懶加載。文檔看這里
1.引入js文件,並注入$ocLazyLoad服務
<script src="lib/ocLazyLoad.min.js"></script>
2.對$ocLazyLoad進行基礎配置
angular.module('starter') .config(["$provide", "$compileProvider", "$controllerProvider", "$filterProvider", function ($provide, $compileProvider, $controllerProvider, $filterProvider) { app.controller = $controllerProvider.register; app.directive = $compileProvider.directive; app.filter = $filterProvider.register; app.factory = $provide.factory; app.service = $provide.service; app.constant = $provide.constant; } ])
3.根據模塊配置路由
$stateProvider .state('login', { url: '/login', templateUrl: 'template/login/login.html', controller:'loginCtrl', resolve:{ deps:["$ocLazyLoad",function($ocLazyLoad){ return $ocLazyLoad.load("template/login/login.js"); }] } })
關於第三方js文件ocLazyLoad就無能為力了,它是用來懶加載angular module的,而不是第三方的js庫。所以如果考慮到這些可以使用requireJS來加載,之所以在這個項目中沒有用過是因為ocLazyLoad比起來更小一些,壓縮過后只有15k大小,而且requireJS移植性不好且侵入性高(其實我也不知道什么意思,哈哈哈)。還有一點主要的是這個一次配置不用處處引用,挺契合angular模塊化的特點的。至於requireJS的使用,只有下次用過了再來補充吧。
-----------------------------2016-12-15--------------------------------------
上一次使用ocLazyLoad是在ionic項目中,這次在angularWEB項目中使用,搭建的時候出了angular is not defined的問題,怎么找也解決不掉問題,結果最后改變了一下ui-router和oclazyload的引入位置,問題解決~記住一定要先引入ui-router再引入oclazyload啊