angularJS+requireJS實(shí)現(xiàn)controller及directive的按需加載示例
最近因?yàn)轫?xiàng)目的比較大,需要加載的js文件較多,為了提高首屏頁(yè)面的加載速度,需要對(duì)js文件進(jìn)行按需加載,然后網(wǎng)上參考了一些資料,自己也深入研究一番之后,實(shí)現(xiàn)了按需加載控制器js文件及指令js文件的效果;
思路如下
1、借助ui-router里面的resolve屬性來(lái)實(shí)現(xiàn)預(yù)加載
2、需要借助$controllerProvider動(dòng)態(tài)去注冊(cè)控制器,$compileProvider動(dòng)態(tài)去注冊(cè)指令
3、需要借助$q來(lái)幫助我們實(shí)現(xiàn)異步加載,具體步驟如下所示;
1、在我們定義的app(在定義app.config()的js文件內(nèi))模塊上掛載注冊(cè)控制器和指令的屬性,如下所示
app.register = { //注意這里的$controllerProvider是內(nèi)置注冊(cè)控制器的屬性,$compileProvider是內(nèi)置的注冊(cè)指令的屬性
controller: $controllerProvider.register,
directive: $compileProvider.directive
}
2、借助$q定義一個(gè)異步加載js文件的方法(在定義路由的js文件內(nèi))
app.loadMyJs = function(js){
return function($rootScope, $q){
var deffer = $q.defer(),
deps=[];
angular.isArray(js) ? (deps = js) : deps.push(js);
require(deps,function(){
$rootScope.$apply(function(){
deffer.resolve();
});
});
return deffer.promise;
};
}
3、借助路由里面的resolve屬性,進(jìn)行配置需要加載的控制器文件及指令文件(在定義路由的js文件內(nèi))
.state('view1',{
url: '/view1',
templateUrl: 'temp/partial1.html',
controller: 'MyCtrl1',
resolve:{
//需要?jiǎng)討B(tài)加載的控制器及指令js文件,其它js文件以此類(lèi)推
deps:app.loadMyJs(['./controllers/my-ctrl-1','./directives/loading'])
}
})
4、通過(guò)第一步先掛載在app上的屬性來(lái)進(jìn)行動(dòng)態(tài)注冊(cè)控制器or指令
//注冊(cè)控制器(對(duì)應(yīng)的控制器js文件內(nèi))
app.register.controller('MyCtrl1', function ($scope,$css,$rootScope) {
//控制器里面的內(nèi)容
});
//注冊(cè)指令(對(duì)應(yīng)的指令js文件內(nèi))
app.register.directive("loading",function (){
return {
restrict: "AE",
replace: true,
template: "<div class='mask' ng-show='isLoading'><span>loading</span></div>"
}
});
如果有服務(wù)or過(guò)濾器需要按需加載也是類(lèi)似的方法,另外如果是公共的服務(wù),指令or過(guò)濾器等不需要進(jìn)行按需加載的文件就可以使用普通的angular.module()的方式來(lái)定義即可;
最后這只是實(shí)現(xiàn)按需加載js文件中的一種思路,以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
angularjs實(shí)現(xiàn)多選框分段全選效果實(shí)現(xiàn)
這篇文章主要為大家介紹了angularjs實(shí)現(xiàn)多選框分段全選效果實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
AugularJS從入門(mén)到實(shí)踐(必看篇)
下面小編就為大家?guī)?lái)一篇AugularJS從入門(mén)到實(shí)踐(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
解決AngualrJS頁(yè)面刷新導(dǎo)致異常顯示問(wèn)題
本篇文章主要介紹了解決AngualrJS頁(yè)面刷新導(dǎo)致異常顯示問(wèn)題的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
Angular2學(xué)習(xí)教程之ng中變更檢測(cè)問(wèn)題詳解
這篇文章主要給大家介紹了Angular2學(xué)習(xí)教程之ng中變更檢測(cè)問(wèn)題的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05
@angular前端項(xiàng)目代碼優(yōu)化之構(gòu)建Api Tree的方法
這篇文章主要介紹了@angular前端項(xiàng)目代碼優(yōu)化之構(gòu)建Api Tree的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
AngularJs上傳前預(yù)覽圖片的實(shí)例代碼
使用AngularJs進(jìn)行開(kāi)發(fā),在項(xiàng)目中,經(jīng)常會(huì)遇到上傳圖片后,需在一旁預(yù)覽圖片內(nèi)容,怎么實(shí)現(xiàn)這樣的功能呢?今天小編給大家分享AugularJs上傳前預(yù)覽圖片的實(shí)現(xiàn)代碼,需要的朋友參考下吧2017-01-01
Angular 與 Component store實(shí)踐示例
這篇文章主要為大家介紹了Angular 與 Component store實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
angularjs項(xiàng)目的頁(yè)面跳轉(zhuǎn)如何實(shí)現(xiàn)(5種方法)
本篇文章主要介紹了詳解angularjs項(xiàng)目的頁(yè)面跳轉(zhuǎn)如何實(shí)現(xiàn) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05

