angularjsルートにオプションのパラメーター値を指定できますか?


166

オプションのパラメーターを使用してルートを設定できますか(同じテンプレートとコントローラーですが、一部のパラメーターが存在しない場合は無視する必要がありますか?

それで、次の2つのルールを書く代わりに、1つだけ持っていますか?

module.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/users/', {templateUrl: 'template.tpl.html', controller: myCtrl}).            
     when('/users/:userId', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

このようなもの([このパラメーターはオプション])

when('/users[/:userId]', {templateUrl: 'template.tpl.html', controller: myCtrl})
//note: this previous doesn't work

ドキュメントには何も見つかりませんでした。


[]1.1.5バージョンでは無視されます(なし)。
OZ_ 2013

本当に?私は1.1.5を使用しており、コード[:userId]を試してみましたが、無視しません。
Alexandru R

せずに試してください[]。:このコミットを参照してくださいgithub.com/angular/angular.js/commit/...
OZ_

おっと、申し訳ありませんが、$ resourceについてです。ルーティングで機能するかどうかはわかりません。すみません。
OZ_ 2013

1
g-orgeの答えが良ければ、人々がすべてをスクロールして最良の答えを見つける必要がないように、それをマークしてください。
AlexStack 2014年

回答:


243

Angularはこれをサポートしているようです。

最新の(v1.2.0)ドキュメントから$routeProvider.when(path, route)

path疑問符(:name?)付きのオプションの名前付きグループを含めることができます


7
末尾のスラッシュを使用しないようにする方法はありますか?私のルートの場合:.when('/claims/documents/:CLAIMS_ID/:DOCUMENT_NAME?'...URLに末尾のスラッシュがない場合、一致しません。つまり/claims/documents/1234/一致しますが、一致/claims/documents/1234しません。
James Bell

1
誰もが問題の解決策を持っているかどうかを知りたいと思い@JamesBellによって報告
Leiko

5
Angular 1.3では、上記のコメントで言及されていたスラッシュの問題が修正されています。/ claims / documents / 1234 /への移動は、/ claims / documents / 1234と同様に正しく機能します。つまり、末尾のスラッシュがあってもなくても機能します。
ユダガブリエルヒマンゴ2015

1
ルートにオプションのパラメーターがある場合でも、この現象が発生します。たとえば、ルートが「/:classification?/ package / compare」であり、「/ package / compare」というURLに移動しようとすると、機能します。何らかの理由で「/ package / compare /」を試すと、ASCIIコードが分類に追加されるか、「/%3f / package / compare」が実際のルートではありません。
ruby_newbie

ドキュメントは紛らわしいです。
Oliver Dixon

59

@ g-eorgeの言及のように、次のようにすることができます。

module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
  when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

オプションのパラメータが必要なだけ作成することもできます。


8

こちらの@jlareauの回答をご覧ください:https ://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl

関数を使用して、テンプレート文字列を生成できます。

var app = angular.module('app',[]);

app.config(
    function($routeProvider) {
        $routeProvider.
            when('/', {templateUrl:'/home'}).
            when('/users/:user_id', 
                {   
                    controller:UserView, 
                    templateUrl: function(params){ return '/users/view/' + params.user_id;   }
                }
            ).
            otherwise({redirectTo:'/'});
    }
);

2

実際、私はOZ_が多少正しいかもしれないと思います。

ルートが'/users/:userId'あり、ナビゲートする場合'/users/'(末尾の/に注意)、$routeParamsコントローラーにはuserId: ""1.1.5に含まれるオブジェクトを含める必要があります。つまり、userId完全に無視されているわけではありませんが、私はそれがあなたが得ることになる最高のものだと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.