长话短说,我有一个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); }' –