angularjs路由可以有可选的参数值吗?

时间:2013-07-07 09:45:06

标签: angularjs angularjs-routing

我可以设置一个带有可选参数的路径(相同的模板和控制器,但是如果它们不存在,应该忽略一些参数吗?

因此,不是只编写以下两条规则吗?

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

我在他们的文档中找不到任何内容。

4 个答案:

答案 0 :(得分:238)

看起来Angular现在支持这个。

来自$routeProvider.when(path, route)的最新(v1.2.0)文档:

path可以包含带有问号(:name?

的可选命名组

答案 1 :(得分:54)

就像@ g-eorge提到的那样,你可以这样做:

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

您也可以根据需要制作可选参数。

答案 2 :(得分: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:'/'});
    }
);

答案 3 :(得分:2)

实际上我认为OZ_可能有些正确。

如果您有路由'/users/:userId'并导航到'/users/'(请注意尾随/),控制器中的$routeParams应该是1.1.5中包含userId: ""的对象。所以没有完全忽略参数userId,但我认为这是你最好的。

相关问题