AngularJs根據造訪的頁面動態載入Controller的解決方案_AngularJS
用Ng就是想做單頁應用(simple page application),就是希望站內所有的頁面都是用Ng的Route,盡量不用location.href,但是這樣的webapp好處是很多,但是美中不足的是當你的webapp隨著時間的推移,用戶變多,功能變得更豐富,controller也變得越來越多,你不得不把所有的controller當作全局模組進行加載,以使得在站內任何一個頁面中按F5刷新後能route到任何一個其他頁面,而不會發生找不到controller的錯誤,加載所有的controller使得在手機端上,頁面的首次打開速度變慢,今天我就和大家分享我是怎麼改善這個缺點的,實作Controller的模組化載入
app.js
app.config(function($controllerProvider, $compileProvider, $filterProvider, $provide) {
app.register = {
controller: $controllerProvider.register,
directive: $compileProvider.directive,
filter: $filterProvider.register,
factory: $provide.factory,
service: $provide.service
};
});
在route時阻塞一下去加載需要的js,加載成功後再繼續,不知道$script是什麼的同學請點http://dustindiaz.com/scriptjs
$routeProvider.when('/:plugin', {
templateUrl: function(rd) {
return 'plugin/' rd.plugin '/index.html';
},
resolve: {
load: function($q, $route, $rootScope) {
var deferred = $q.defer();
var dependencies = [
'plugin/' $route.current.params.plugin '/controller.js'
];
$script(dependencies, function () {
$rootScope.$apply(function() {
deferred.resolve();
});
});
return deferred.promise;
}
}
});
controller.js
app.register.controller('MyPluginCtrl', function ($scope) {
...
});
index.html
...
這樣改造就可以實現route時動態去加載這個route所依賴的js,但是一般我們的webapp中route都有很多,每個都要寫那麼一堆代碼,既難看又難於維護,我們不妨再優化一下
app.js
app.config(function($controllerProvider, $compileProvider, $filterProvider, $provide) {
app.register = {
控制器:$controllerProvider.register,
指示:$compileProvider.directive,
過濾器:$filterProvider.register,
工廠:$provide.factory,
服務:$provide.service
};
app.asyncjs = 函數 (js) {
return ["$q", "$route", "$rootScope", function ($q, $route, $rootScope) {
var deferred = $q.defer();
var dependency = js;
if (Array.isArray(相依性)) {
for (var i = 0; i 且依賴項[i] = "?v=" v;
}
} 其他 {
dependency = "?v=" v;//v是版本號碼
}
$script(依賴項, 函數 () {
$rootScope.$apply(function () {
deferred.resolve();
});
});
返回 deferred.promise;
}];
}
});
$routeProvider.when('/:plugin', {
templateUrl: 函數(rd) {
return 'plugin/' rd.plugin '/index.html';
},
解:{
載入:app.asyncjs('plugin/controller.js')
}
});
到這裡只要把原來一個controller.js按模組分割成多個然後js為路由添加模組依賴速度依靠提高負載,這個方法可以用在控制器多層加載,而且可以用在其他js模組,例如jquery.ui.datepicker.js這樣的日期選擇插件,在需要日期選擇插件的路由節點加上
$routeProvider.when('/:plugin', {
templateUrl: 函數(rd) {
return 'plugin/' rd.plugin '/index.html';
},
解:{
載入:app.asyncjs(['plugin/controller.js','plugin/jquery.ui.datepicker.js'])
}
});
便可以了
PS:$script可以對需要載入的js進行判斷,如果之前已經載入了就會直接回傳成功,只有在第一次進入日期選擇介面時才會去請求jquery.ui.datepicker。 js退出去再進去就不會去請求啦

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

SpringBoot小白創建項目,掃描不到Controller一系列問題1.2.3.4.5.6.還有一個方法是在啟動服務類的入門,添加@ComponentScan(basePackages={“xxx.xxx.xx”,“xxx.xxx .xx”})裡面的是包的全限定名,可以為多個SpringBoot自訂controller無法掃描到SpringBoot自訂controller路由找不到,原因是啟動類別和自訂的Controller包不在同一級目錄下。官方建議application.java放的位

前言在某些情況下,服務的controller中前綴是一致的,例如所有URL的前綴都為/context-path/api/v1,需要為某些URL加上統一的前綴。能想到的處理辦法為修改服務的context-path,在context-path中加上api/v1,這樣修改全域的前綴能夠解決上面的問題,但存在弊端,如果URL存在多個前綴,例如有些URL需要前綴為api/v2,就無法區分了,如果服務中的一些靜態資源不想添加api/v1,也無法區分。下面透過自訂註解的方式實現某些URL前綴的統一添加。一、

Javascript 是一個非常有個性的語言. 無論是從程式碼的組織, 還是程式碼的程式設計範式, 或物件導向理論都獨具一格. 而很早就在爭論的Javascript 是不是物件導向語言這個問題, 顯然已有答案. 但是, 即使Javascript 叱吒風雲二十年, 如果想要看懂jQuery, Angularjs, 甚至是React 等流行框架, 觀看《黑馬雲課堂JavaScript 高級框架設計視頻教程》就對了。

在現今資訊時代,網站已成為人們獲取資訊和交流的重要工具。一個響應式的網站能夠適應各種設備,為使用者提供優質的體驗,成為了現代網站開發的熱點。本篇文章將介紹如何使用PHP和AngularJS建立響應式網站,進而提供優質的使用者體驗。 PHP介紹PHP是一種開源的伺服器端程式語言,非常適合Web開發。 PHP具有許多優點,如易於學習、跨平台、豐富的工具庫、開發效

隨著網路的不斷發展,Web應用已成為企業資訊化建設的重要組成部分,也是現代化工作的必要手段。為了讓Web應用能夠方便開發、維護和擴展,開發人員需要選擇適合自己開發需求的技術框架和程式語言。 PHP和AngularJS是兩種非常流行的Web開發技術,它們分別是伺服器端和客戶端的解決方案,透過結合使用可以大大提高Web應用的開發效率和使用體驗。 PHP的優勢PHP

使用PHP框架時,經常會遇到諸如「PHPFatalerror:Class'Controller'notfound」的錯誤。這種錯誤通常與框架中檔案的命名、位置或載入有關,特別是當你嘗試使用控制器時。本文將介紹幾種常見的處理方法來解決這個問題。確認檔案位置首先,你需要確認控制器檔案是否位於框架的正確目錄中。例如,如果你使用的是Laravel框架

隨著Web技術的快速發展,單頁Web應用程式(SinglePageApplication,SPA)已成為越來越流行的Web應用程式模型。相較於傳統的多頁Web應用程序,SPA的最大優勢在於使用者感受更加流暢,同時伺服器端的運算壓力也大幅減少。在本文中,我們將介紹如何使用Flask和AngularJS來建構一個簡單的SPA。 Flask是一款輕量級的Py

隨著Web應用程式的普及,前端框架AngularJS變得越來越受歡迎。 AngularJS是一個由Google開發的JavaScript框架,它可以幫助你建立具有動態Web應用程式功能的網頁應用程式。另一方面,對於後端編程,PHP是非常受歡迎的程式語言。如果您正在使用PHP進行伺服器端編程,那麼結合AngularJS使用PHP將可以為您的網站帶來更多的動態效
