尝试这样的解决方案之后:Aborting ngResource using a promise object我无法取消使用$ resource发出的请求。 我的最后一次尝试就是:
控制器:
ostr << std::fixed << value;
foodTypeFactory:
angular.module('theApp')
.controller('homeController', function ($q, foodTypeFactory) {
var vm = this;
vm.testButton = function () {
vm.aborter = $q.defer();
foodTypeFactory(vm.aborter).getTest({}, function (data) {
console.log(data);
});
};
vm.cancelButton = function () {
vm.aborter.resolve();
}
});
一旦请求完成,即使我尝试取消它也会完成。 我正在使用角度资源1.6.2的Angular 1.6.2。
我做错了什么?
答案 0 :(得分:0)
我可以建议您使用http拦截器..您可以停止请求......这样的事情:
1)创建一个像(auth.interceptor.js:
这样的文件"use strict";
angular
.module("demo")
.factory('authInterceptorService', ['$q', '$location', 'localStorageService',
function ($q, $location, localStorageService) {
// Public Method
return {
request: function (config) {
config.headers = config.headers || {};
if(!MYCONDITION){ //<-- you can here your logic to test if conitnue request flow or not
return; //<-- TERMINATE IT ..
}else{
return config; //<-- CONTINUE WITH NORMAL REQUEST
}
}
};
}]);
2)在app.config.js文件中:
$httpProvider.interceptors.push("authInterceptorService");
然后在你的所有请求中(通过$ http或$ resource)这个逻辑适用...在这里你也可以在需要的时候注入Bearer Token
希望对你有帮助
答案 1 :(得分:0)
最后我找到了解决方案! 从angular 1.5 $资源可以使用$ cancelRequest()取消。 就我而言:
控制器:
angular.module('theApp')
.controller('homeController', function (foodTypeFactory) {
var vm = this;
vm.testButton = function () {
vm.onGoingRequest = foodTypeFactory.getTest({}, function (data) {
console.log(data);
});
};
vm.cancelButton = function () {
vm.onGoingRequest.$cancelRequest();
}
});
foodTypeFactory:
angular.module('theApp')
.factory('foodTypeFactory', function ($resource, BACKEND_API) {
return $resource(BACKEND_API + '/api/foodtypes/:id', {id: '@id'}, {
getTest: {
cancellable: true
}
});
});