我在angularjs中创建了一个使用ng-view的应用程序。通过路由提供者的肝脏,在ng-view中加载了四个不同的模块。 在每个模块中,我按以下方式发送http请求: -
var requestManager = {
"locations": {},
"employees": {},
"items": {},
"templates": {}
};
sendRequestToServer = function (reqObj) {
var reqObj = reqObj,
httpObj = {},
defer = $q.defer();
httpObj = {
method: reqObj.method,
url: baseUrl + reqObj.url,
timeout: 90000
};
if (reqObj.method == 'GET') {
httpObj['params'] = reqObj.data;
if (reqObj.uniqueId) {
httpObj['headers'] = {
'uniqueId': uniqueId
}
}
} else if (reqObj.method == 'POST' || reqObj.method == 'PUT') {
httpObj['headers'] = {
'Content-Type': 'application/x-www-form-urlencoded'
};
httpObj['data'] = reqObj.data;
}
requestManager[reqObj.moduleName][reqObj.requestName] = $http(httpObj).success(function (data, status, headers, config) {
var dataObj = {
data: data,
status: status,
headers: headers,
config: config
};
defer.resolve(dataObj);
})
.error(function (data, status, headers, config) {
var dataObj = {
data: data,
status: status,
headers: headers,
config: config
};
defer.reject(dataObj);
});
return defer.promise;
}
现在我的要求是: - 当路由从一个模块更改为另一个模块时,我想中止服务器通信中间的请求。 为此,我正在收听毁灭事件: -
$rootScope.$on('destroyModule', function(event, moduleName) {
var requests = requestManager[moduleName]
, defer = $q.defer()
, index
, req;
for(req in requests){
//Want abort the request
defer.reject(requests[req]);
}
})
但它不起作用..我认为我所做的是错的。任何人都可以帮助这个主题? 提前谢谢你
答案 0 :(得分:0)
如果你还有另一个可以监听的范围(可能在一个视图控制器中?),那么在$ rootScope上不会触发destroy事件。你可以这样连接:
$scope.$on("$destroy", function(){ ... });
另一方面,如果你只想检测位置变化,你可以这样做:
$rootScope.$on("$locationChangeStart", function(){ ... });