web-dev-qa-db-ja.com

角度付きルートはオプションのパラメータ値を持つことができますか?

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

それで、次の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

私は彼らのドキュメンテーションには何も見つかりませんでした。

161
Alexandru R

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

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

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

238
g-eorge

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

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

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

54
zmilan

ここで@ 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:'/'});
    }
);
8
chrisjordanme

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

'/users/:userId'というルートがあり、'/users/'に移動する場合(末尾の/に注意)、コントローラの$routeParamsは1.1.5のuserId: ""を含むオブジェクトになります。したがって、userIdというパラメータが完全に無視されているわけではありませんが、これが最良の方法だと思います。

2
Roy Daniels