Работя върху огромно уеб приложение (AngularJS иRequireJS), в който има много JS файлове. (Толкова много контролери, филтри, услуги и толкова много плъгини на трети страни). Проблемът, с който се сблъсквам, е, че моето приложение отнема твърде много време, за да изтегля всички файлове (наведнъж) всеки път, когато обновя приложението си. Можем ли да използваме каквато и да е стратегия, чрез която конфигурираме изискването си JS по начин, че да се изтеглят само необходимите файлове вместо Всички файлове?
В момента моето Изискване JS е конфигурирано по този начин:
reqire.config({
paths: {
angular: "../../",
jquery: "../../", .......
}, shim: {
bootstrap: {
deps: ["jquery"]
}.........................
});
Отговори:
0 за отговор № 1Можете също така да погледнете ocLazyLoad за вашите мързеливи нужди за зареждане - връзка
Една от стратегиите е да се изисква зареждането на приставкив обаждането на Resolve на ui-router. Това ще зареди необходимите зависимости за изглед / състояние, преди да се опита да премине към него и е обещано да гарантира, че всичко се зарежда в правилния ред.
.state("myState", {
url: "/myState",
template: "<div ui-view class="fade-in"></div>",
resolve: {
deps: ["$ocLazyLoad",
function( $ocLazyLoad ){
return $ocLazyLoad.load(["scripts/controllers/myController.js"]);
}]
}
})
Можете също така да го използвате за зареждане на няколко файла, ако това се наложи.
.state("ui.map.google", {
url: "/google",
templateUrl: "views/ui/map/google.html",
controller: "GoogleMapCtrl",
resolve: {
deps: ["$ocLazyLoad",
function( $ocLazyLoad ){
return $ocLazyLoad.load( [
{
files: ["vendor/jquery/load-google-maps.js",
"scripts/controllers/googlemap.js"]
},
{
name:"ui.map",
files:["vendor/modules/angular-ui-map/ui-map.js"]
}
]).then(
function(){
return loadGoogleMaps();
}
)
}]
}
})
Не е нужно да правите нищо специално в контролера, за да направите тази работа, и приставката ocLazyLoad е много конфигурируема (можете да настроите манифести / пакети и т.н.).