web-dev-qa-db-ja.com

AngularJs routeProvider HTTPステータス403

サーバー側で認証と承認を行っています。

AngularJsでは、このようにrouteProviderを使用してルーティングを行っています。

$routeProvider.
        when('/', {
            templateUrl: 'partials/_home',
            controller: 'HomeCtrl'
        }).
        when('/home', {
            templateUrl: 'partials/_home',
            controller: 'HomeCtrl'
        }).
        when('/users', {
            templateUrl: 'partials/_users',
            controller: 'UserCtrl'
        }).
        when('/users/:id', {
            templateUrl: 'partials/_userForm',
            controller: 'UserCtrl'
        }).
        otherwise({
            redirectTo: '/'
        });

そして、ここで解決すべき問題があります。403angularがサーバーページを表示していない場合、何もしません。

enter image description here

誰かがこれを処理する方法の提案をしましたか?

20
Charlires

AngularJSインターセプター-v1.4.2に更新

インターセプターは、$ httpProvider.interceptors配列に追加することにより、$ httpProviderに登録されるサービスファクトリーです。ファクトリーが呼び出され、依存関係(指定されている場合)が挿入され、インターセプターが返されます。

さらに読むには: $ http angularjs Doc

セクション構成(その一部)

.config(function ($httpProvider) {
    $httpProvider.interceptors.Push('responseObserver');
})

応答-オブザーバーファクトリー

403.htmlおよび500.htmlは既存のHTMLファイルであり、ユーザー向けのヘルプコンテンツでスタイル付けされています。

.factory('responseObserver', function responseObserver($q, $window) {
    return {
        'responseError': function(errorResponse) {
            switch (errorResponse.status) {
            case 403:
                $window.location = './403.html';
                break;
            case 500:
                $window.location = './500.html';
                break;
            }
            return $q.reject(errorResponse);
        }
    };
});

インターセプターに関する知識を拡張するには: http://djds4rce.wordpress.com/2013/08/13/understanding-angular-http-interceptors/

38