angularjs で 404 ページをリダイレクトする代わりに、404 ページをレンダリングする良い方法を探しています。私が見つけた多くの解決策は、すべて別のページにリダイレクトすることです。ユーザーがブラウザの戻るボタンをクリックすると、404ページへの別のリダイレクトが作成されるという問題が発生します。そのため、代わりに 404 ページをレンダリングするソリューションを探しています。
お読みいただきありがとうございます。
angularjs で 404 ページをリダイレクトする代わりに、404 ページをレンダリングする良い方法を探しています。私が見つけた多くの解決策は、すべて別のページにリダイレクトすることです。ユーザーがブラウザの戻るボタンをクリックすると、404ページへの別のリダイレクトが作成されるという問題が発生します。そのため、代わりに 404 ページをレンダリングするソリューションを探しています。
お読みいただきありがとうございます。
の使用法は、otherwise
あなたが探しているものかもしれません。
angular.module('MyApp', [])
.config(function($routeProvider) {
$routeProvider.
when('/', {templateUrl:'/home.html'}).
// add as many as you want here...
otherwise({templateUrl:'/404.html'}); // Render 404 view
});
更新: OPの質問をより注意深く読んだ後(申し訳ありませんが、ここではかなり早い段階で)、別の解決策(実際には2つ)があると思います:
1)コンテンツを非表示に$scope
するメイン UI への変数ng-view
これにはng-show
、ビューとresolve
パラメーターが必要です。次に$emit
、他のコントローラーに a を実行して、「ねえ、この男は 404 をヒットしました。ビューを表示しないでください」と伝えます。
$routeProvider.otherwise({
controller: 'masterController',
resolve: {
404: function(){
return true;
};
});
angular.module('MyApp', [])
.controller('masterController', function($scope, 404) {
$scope.isOn404 = 404
...
})
// In the view
<div ng-controller="masterController">
<div ng-hide="isOn404">
<!-- Actual content -->
</div>
<div ng-show="isOn404">
<!-- 404 Page -->
</div>
</div>
これには、残りの UI を管理するのに役立つマスター コントローラーが必要です。また、単に使用するのではなく、ページの残りの部分を処理するために何らかのコーディングを行う必要がある可能性がありますng-view
(たとえば、現在のヘッダー、本文などを表示するコントローラー)。
2) カスタム ルーティング システム
私は実際に特定のプロジェクトに対してこれを行いました。「BackURL」と「FordwardURL」を設定するサービスがあります。$onRouteChange
どこに行き、どこから来たのかを保存するたびに。ユーザーが 404 にヒットしようとしている場合でも、元の例を使用してレンダリングできますが、ユーザーがヒットバックした場合、AngularJS を介してそれをキャッチし、実際の「戻る」ページをレンダリングします。この場合、 Lungoというモバイル デバイスでのルーティングに役立つライブラリと、私が勤務する会社が使用しているLAB (Lungo Angular Bridge) というライブラリを使用しています。
私は AngularJS を初めて使用するので、これは理想的な解決策ではないかもしれませんが、404 ページの表示や、ログイン ページなどの同様の用途には機能します。
実施例を見る
すべてを同じマスター テンプレートにリダイレクトします。
$routeProvider
.when('/', {
controller: 'homeController',
templateUrl: 'partial.master.html'
})
.when('/cust/:custid', {
controller: 'custController',
templateUrl: 'partial.master.html'
})
master.html テンプレートは masterController を参照し、サブページがあります。
<div ng-controller="masterController">
<h2><a href="#">{{title}} - Header</a></h2>
<hr>
<div ng-include="subPage"></div>
<hr>
<h3>{{title}} - Footer</h3>
</div>
masterController には条件付きサブページ ロジックがあります。
controllers.custController = function($scope, $rootScope, $routeParams){
$rootScope.subpage = 'cust';
$scope.cust = getCustomer( $routeParams.custid );
};
controllers.masterController = function($scope, $rootScope) {
switch($rootScope.subpage) {
case 'home':
$scope.subPage = 'partial.home.html';
break;
case 'cust':
if($scope.cust) {
$scope.subPage = 'partial.cust.html';
} else {
$scope.subPage = 'partial.404notfound.html';
}
break;
以前にここで回答したように、ui-router を使用することもできます: https://stackoverflow.com/a/23290818/2723184。私見、あなたは素晴らしいライブラリを手に入れるだけでなく、より良いソリューションを手に入れることができます.