回答:
だけでは使えません$stateProvider
。
次の$urlRouterProvider
ようなコードを挿入して作成する必要があります。
$urlRouterProvider.otherwise('/otherwise');
/otherwise
URLは、いつものような状態に定義する必要があります。
$stateProvider
.state("otherwise", { url : '/otherwise'...})
ksperlingが説明しているこのリンクを参照してください
$stateProvider
。テンプレートを表示するだけでリダイレクトは不要な場合は、作業が少なくなります。@ juan-hernandezの答えが好きです。
otherwise
(この場合'/otherwise'
)に渡される値は、状態の名前(の最初のパラメーター.state
)またはurl
オプションの値と一致する必要がありますか?
キャッチオール構文()を$stateProvider
使用すると、次のように、リストの一番下に状態設定を追加するだけです。"*path"
$stateProvider.state("otherwise", {
url: "*path",
templateUrl: "views/error-not-found.html"
});
すべてのオプションは、https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parametersで説明されています。
このオプションの良い点は、とは対照$urlRouterProvider.otherwise(...)
的に、場所の変更を強制されないことです。
you're not forced to a location change
か?
/this/does/not/exist
アクセスすると、URLはアドレスバーにそのまま残ります。他の解決策はあなたを連れて行きます/otherwise
$ stateをotherwise関数に手動で挿入することもできます。これにより、URL以外の状態に移動できます。これには、ブラウザがアドレスバーを変更しないという利点があります。これは、前のページに戻る処理に役立ちます。
$urlRouterProvider.otherwise(function ($injector, $location) {
var $state = $injector.get('$state');
$state.go('defaultLayout.error', {
title: "Page not found",
message: 'Could not find a state associated with url "'+$location.$$url+'"'
});
});
さて、あなたが尋ねた質問がサンプルコードの最初の行ですでに答えられていることに気づいたばかげた瞬間!サンプルコードをご覧ください。
angular.module('sample', ['ui.compat'])
.config(
[ '$stateProvider', '$routeProvider', '$urlRouterProvider',
function ($stateProvider, $routeProvider, $urlRouterProvider) {
$urlRouterProvider
.when('/c?id', '/contacts/:id')
.otherwise('/'); // <-- This is what I was looking for !
....
私はすでに提供されている素晴らしい答えに触れたいだけです。の最新バージョンは@uirouter/angularjs
、クラスUrlRouterProvider
を非推奨としてマークしました。UrlService
代わりに使用することをお勧めします。次の変更で同じ結果を得ることができます:
$urlService.rules.otherwise('/defaultState');
追加のメソッド:https : //ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html
受け入れ答えの参照angular-route
について質問ui-router
。受け入れられた回答は「モノリシック」を 使用しますが$routeProvider
、これにはngRoute
モジュールが必要です(モジュールがui-router
必要ui.router
です)。
最高の定格の答えは使用しています$stateProvider
代わりに、とのようなものを言います.state("otherwise", { url : '/otherwise'... })
が、私はの「それ以外」の一切の言及を見つけることができません、それはリンクのドキュメントを。しかし、私はそれ$stateProvider
が言っているこの答えで言及されているのを見る:
だけでは使えません
$stateProvider
。注射する必要があります$urlRouterProvider
それが私の答えがあなたを助けるかもしれないところです。私にとっては、次の$urlRouterProvider
ように使用するだけで十分です:
my_module
.config([
, '$urlRouterProvider'
, function(
, $urlRouterProvider){
//When the url is empty; i.e. what I consider to be "the default"
//Then send the user to whatever state is served at the URL '/starting'
//(It could say '/default' or any other path you want)
$urlRouterProvider
.when('', '/starting');
//...
}]);
私の提案は、ui-router
ドキュメント(この特定のリビジョン)と一貫しており、同様の使用法が含まれています。when(...)
メソッド(関数の最初の呼び出し):
app.config(function($urlRouterProvider){
// when there is an empty route, redirect to /index
$urlRouterProvider.when('', '/index');
// You can also use regex for the match parameter
$urlRouterProvider.when(/aspx/i, '/index');
})
$stateProvider.otherwise
ので、それが私を助けてくれることに注意してください)