GET错误后重定向到404

时间:2017-06-22 05:22:10

标签: angularjs redirect http-status-code-404

是否可以在特定控制器中重定向而不更改URL?我想,如果进入控制器我有GET请求的错误,它必须显示404页面。例如,我有以下文件。

index.html

<!DOCTYPE html>
<html ng-app="app" ng-controller="MainCtrl">
<head>
    ...
</head>
<body>
    ...
    <ng-view></ng-view>
    ...
</body>
</html>

app.js

angular
.module('app', [...])
...
.config(function($routeProvider) {
    $routeProvider
    .when('/', {
        templateUrl: 'views/home.html',
        controller:  'HomeCtrl'
    })
    .when('/page1', {
        templateUrl: 'views/page1.html',
        controller:  'Page1Ctrl'
    })
    .when('/page2', {
        templateUrl: 'views/page1.html',
        controller:  'Page2Ctrl'
    })
    .when('/page3', {
        templateUrl: 'views/page3.html',
        controller:  'Page1Ctrl'
    })
    ...
    .otherwise({
        templateUrl: 'views/404.html',
        controller:  '404Ctrl'
    });
});

例如,重定向必须在page1.js

中生成
angular.module('app')
.controller('Page1Ctrl', function($scope, $http) {
    $http.get(...).then(function() {
        // all ok.
    }, function() {
        // error, redirect to 404 page.
    });
});

我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

404 page的路线应为:

.when('/404Page', {
    templateUrl: 'views/404.html',
    controller:  '404Ctrl'
});

你可以在interceptor中处理它,如下所示:

$provide.factory('MyHttpInterceptor', function ($q, $window ) {
    return {

        // On response failture
        responseError: function (rejection) {

          if(rejection.status==400)
             $state.go('404Page');

          return $q.reject(rejection);
        }
    }
  });
  //push interceptor into interceptors array
  $httpProvider.interceptors.push('MyHttpInterceptor');

我希望这会对你有所帮助。