如果出现任何类型的错误,我的服务器会将错误消息传递给浏览器。但是我如何访问以下信息:
$rootScope.$on("$routeChangeError", function (event, current, previous, rejection) {
console.log(rejection); // "An unknown error has occurred."
});
我在路由定义中使用$ routeProvides.resolve,因此如果这些promise没有解决,$ routeChangeError将成为我的处理方式。有没有办法让我从服务器访问响应并以某种方式显示?
谢谢!
答案 0 :(得分:3)
解析对象上的每个属性都应该是一个返回promise的函数。因此,如果您的某个路由无法解析,则调用拒绝包含promise的延迟对象会将您的错误信息传递给$ routeChangeError处理程序
$routeProvider
.when("/foo", {
templateUrl: "foo.html",
controller: "fooController",
resolve: {
message: function($http){
var deferred = $q.defer();
$http.get('/someUrl').
success(function(data, status, headers, config) {
deferred.resolve(data);
}).
error(function(data, status, headers, config) {
deferred.reject(data);
});
return deferred.promise;
}
}
});
假设data参数包含您要使用的服务器的数据,这将最终出现在$ routeChangeError事件的rejection参数中。
答案 1 :(得分:0)
您不需要以这种方式执行此操作,您可以在Controller中执行此操作:在某些服务中:
angular.module('app').service('SomeService', function($http) {
this.getData = function() {
return $http.get('url');
}
})
.controller('MainCtrl', function(SomeService) {
SomeService.getData().then(function(response) {
//the promise is resolved
// response is the response from server
}).catch(function(error) {
console.log(error) // this error is from your server if the promise rejected
// Then you can add {{error}} on your html and add here
$scope.error = error.data;
});
});