2013-08-08 22 views
7

は、オプションの交換が、otherwiseルートのためにそこにあるファイル404:角度のあるルート - 外部サイトにリダイレクトしますか? AngularJSルートで

$routeProvider 
.when(...) 
.otherwise({ 
    redirectTo: 'my/path' 
}); 

それ以外のアプリにないページにリダイレクトすることは、このように操作を行うための方法はありますか?試しました

$routeProvider 
.when(...) 
.otherwise({ 
    redirectTo: 'http://example.com' 
}); 

このjsutは、存在しない私のアプリでそのパスにリダイレクトしようとしました。私が知っている解決策は、トップレベルコントローラーの$scope.$on('$routeChangeStart')で手動リダイレクトを行うことですが、これはコードの重複の多くです(そしてそれは醜いです)。より良い方法がありますか?

答えて

4

私のknowledgeには、routeProviderは内部ルートのみを処理するため、これはできません。あなたがが何ができるか

$routeProvider 
.when(...) 
.otherwise({ 
    controller: "404Controller", 
    template: "<div></div>" 
}); 

してからちょうどコントローラでwindow.location.href = 'http://yourExternalSite.com/404.html'を使用しています。

2

ngRouteは、存在しないページを指すように履歴を設定するため、新しいコントローラでwindow.location.hrefを使用することはお勧めしません(ユーザーがクリックすると、 404ページにリダイレクトされます)。私は試して失敗しました。私はSOここで問題別に自分の関連ソリューションにあなたを指すように希望

https://stackoverflow.com/a/27938693/1863794

私はそれを採用し、あなたのシナリオに適用されます。私はng-viewのネストされたレイヤーを持たない限り、それが一度だけ宣言されるので、ng-viewの外にMainCtrlを使用することはそれほど難しいとは思わない...私はコードの重複も見ない。私の場合は

.config(['$routeProvider', function($routeProvider) { 
    $routeProvider 
    .when(..) 
    .otherwise({redirectTo: 'http://yourExternalSite.com/404.html'}); 
}]) 
.controller('MainCtrl',[ // <- Use this controller outside of the ng-view! 
    '$rootScope','$window', 
    function($rootScope,$window){ 
    $rootScope.$on("$routeChangeStart", function (event, next, current) { 
     // next.$$route <-not set when routed through 'otherwise' since none $route were matched 
     if (next && !next.$$route) { 
     event.preventDefault(); // Stops the ngRoute to proceed with all the history state logic 
     // We have to do it async so that the route callback 
     // can be cleanly completed first, so $timeout works too 
     $rootScope.$evalAsync(function() { 
      // next.redirectTo would equal be 'http://yourExternalSite.com/404.html' 
      $window.location.href = next.redirectTo; 
     }); 
     } 
    }); 
    } 
]); 

乾杯

4

を、これは私の仕事:あなたはそれがそんなに気になる場合は、別のモジュールでMainCtrlを配置することができます

$routeProvider 
.when('/my-path', { 
    ...typical settings... 
}). 
.otherwise({ 
     redirectTo: function(obj, requestedPath) { 
      window.location.href = appConfig.url404; 
     } 
}); 
+0

は、この修正は、私が探していたまさに –

関連する問題