如何将更有意义的错误信息传递给$ routeChangeError?

时间:2015-01-12 20:14:45

标签: angularjs

如果出现任何类型的错误,我的服务器会将错误消息传递给浏览器。但是我如何访问以下信息:

$rootScope.$on("$routeChangeError", function (event, current, previous, rejection) {
    console.log(rejection); // "An unknown error has occurred."
});

我在路由定义中使用$ routeProvides.resolve,因此如果这些promise没有解决,$ routeChangeError将成为我的处理方式。有没有办法让我从服务器访问响应并以某种方式显示?

谢谢!

2 个答案:

答案 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;

});

});