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

Ale*_*u R 165 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})
}]);
Run Code Online (Sandbox Code Playgroud)

像这样的东西([这个参数是可选的])

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

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

小智 242

看起来Angular现在支持这一点.

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

path可以包含带有问号(:name?)的可选命名组

  • 有什么方法可以避免使用尾部斜杠?如果我的路线是:`.when('/ claims/documents /:CLAIMS_ID /:DOCUMENT_NAME?'...`如果网址没有尾随斜线则不匹配.所以`/ claims/documents/1234 /`匹配,但`/ claims/documents/1234`没有. (7认同)
  • 从Angular 1.3开始,上述评论中提到的尾随斜线问题是固定的.导航到/ claim/documents/1234 /正常工作,/ claim/documents/1234也是如此.简而言之,它可以使用或不使用尾部斜杠. (5认同)

zmi*_*lan 57

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

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

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


小智 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:'/'});
    }
);
Run Code Online (Sandbox Code Playgroud)