【发布时间】:2014-06-08 06:59:52
【问题描述】:
请先过一遍代码
app.js
var app = angular.module('Nimbus', ['ngRoute']);
route.js
app.config(function($routeProvider) {
$routeProvider
.when('/login', {
controller: 'LoginController',
templateUrl: 'templates/pages/login.html',
title: 'Login'
})
.when('/home', {
controller: 'HomeController',
templateUrl: 'templates/pages/home.html',
title: 'Dashboard'
})
.when('/stats', {
controller: 'StatsController',
templateUrl: 'templates/pages/stats.html',
title: 'Stats'
})
}).run( function($q, $rootScope, $location, $route, Auth) {
$rootScope.$on( "$routeChangeStart", function(event, next, current) {
console.log("Started");
/* this line not working */
var canceler = $q.defer();
canceler.resolve();
});
$rootScope.$on("$routeChangeSuccess", function(currentRoute, previousRoute){
$rootScope.title = ($route.current.title) ? $route.current.title : 'Welcome';
});
})
home-controller.js
app.controller('HomeController',
function HomeController($scope, API) {
API.all(function(response){
console.log(response);
})
}
)
stats-controller.js
app.controller('StatsController',
function StatsController($scope, API) {
API.all(function(response){
console.log(response);
})
}
)
api.js
app.factory('API', ['$q','$http', function($q, $http) {
return {
all: function(callback) {
var canceler = $q.defer();
var apiurl = 'some_url'
$http.get(apiurl,{timeout: canceler.promise}).success(callback);
}
}
}]);
当我从家搬到 stats 时,API 会再次发送 http 请求,我有很多这样的 http 调用,我只粘贴了几行代码。
我需要的是我需要cancel在 routechangestart 或成功时中止所有挂起的 http 请求
或者任何其他方式来实现相同的?
【问题讨论】:
-
当您说待处理请求时,您的意思是已经发送到服务器但您没有得到响应的请求?还是排队的(由于单个域名的并发http请求限制)?
-
但是http调用的方式不同,我认为我们可以在这里应用不同
标签: javascript angularjs