長話短說,我有一個2頁的角度js應用程序(原因是因爲我將它集成到CMS模板中,並且單個頁面應用程序不會工作得太好與側邊欄中的CMS小部件)。AngularJS JSON在詳細信息頁面上獲取所有時間
無論如何...我有一個很大的結果頁面,它使用AngularJS 1.5.x工廠和$ q服務來提取3個不同的JSON文件。這全部由控制器控制,稱爲EventsListCtrl。
當你點擊一個項目,它會帶你到另一個單頁面應用程序使用角度的細節頁面(如在介紹中所述)。詳細信息頁面會在URL中拾取x個變量,然後瀏覽正確的JSON文件以提取正確的記錄。這由一個稱爲EventDetailCtrl的單獨控制器控制。
所以它只獲取1個JSON,具體取決於URL中的內容,但是我在日誌中注意到它仍然拉取所有三個JSON文件。我怎樣才能讓它停止拉動所有三個JSON文件。
目標是減少頁面加載速度並停止在JSON文件中拉動我不需要。
我詳細介紹了控制器的例子可以看到下面:
// Event Detail Page
function eventDetailCtrl(MyService, $filter){
var vm = this;
vm.eventStatus = 'Loading';
vm.eventId = window.location.toString().split('?id=')[1].split('&ref')[0];
vm.noResults = '<h4>Sorry, something went wrong.</h4>The page you requested could not be found.';
activateEventDetail();
function activateEventDetail(){
MyService.getEventData.then(
function(response){
vm.eventResults = response;
vm.eventId = $filter('filter')(vm.eventResults,{Id: vm.eventId})[0];
vm.eventStatus = 'Success';
if(vm.eventId != undefined){
window.document.title = "Network West Midlands - Event: " + vm.eventId.Title;
}else{
vm.eventStatus = 'Error';
window.document.title = "Network West Midlands - Event: " + 'Sorry';
}
},function(error){
vm.eventStatus = 'Error';
console.log('EventDetail Error: ' + error.statusText);
}
);
}
}
的爲MyService是我的工廠,使用標準的承諾,技術,如下圖所示:
.factory('MyService',['$http','$q', myService]);
function myService($http, $q){
var eventfulData = $http.get('FutureEvents', {cache: 'true'});
var googleData = $http.get('WmPlacesList', {cache: 'true'});
var facebookEvents = $http.get('FacebookNwm', {cache: 'true'});
return {
getEventData: getData(eventfulData),
getAttractionData: getData(googleData),
getfbEvents: getData(facebookEvents)
}
function getData(jsonData){
/* Just a generic deferred object that we will resolve manually. */
var defer = $q.defer();
$q.when($q.all([jsonData])).then(getDataComplete,getDataFail);
return defer.promise;
function getDataComplete(response){
var finalData = response[0].data;
defer.resolve(finalData);
}
function getDataFail(response){
defer.reject(response);
}
}
}
我已將此作爲正確的答案,因爲它有助於縮短我的代碼並使我走上正確的道路。唯一缺少的是將我的var(s)包含在返回函數中,例如 'getfbEvents:function(){ var facebookEvents = $ http.get('FacebookNwm',{cache:'true'}); return getData(facebookEvents); }' –