使用ui-router的AngularJS状态/视图中的“可选”参数

时间:2014-02-24 01:59:12

标签: angularjs angular-ui-router

我有一个客户搜索视图,默认情况下,只需加载名字和姓氏的表单。但是,它可以将这些参数作为URL中的参数。我的应用配置包含:

    $stateProvider
        .state({
            name:        "search",
            url:         "/search",
            templateUrl: "partials/customerSearch.html",
            controller:  "CustomerSearchCtrl"
        })
        .state({
            name:        "searchGiven",
            url:         "/search/:fn/:ln",
            templateUrl: "partials/customerSearch.html",
            controller:  "CustomerSearchCtrl"
        })

这样可行,但似乎有不必要的冗余。有没有更好的办法?这是$urlRouterProvider应该处理的事情吗?

3 个答案:

答案 0 :(得分:25)

关于可选参数有一个issue in ui-router tracker。截至目前,您无法以明确的方式指定它们,但您可以使用正则表达式:

url: '/search{fn:(?:/[^/]+)?}'

或查询参数:

url: '/search?fn&ln'
然而,人们正在研究它,所以我希望将来某个时候可以使用所希望的功能。

答案 1 :(得分:11)

您可以使用:

$stateProvider
.state({
    name:        "searchGiven",
    url:         "/search/{fn}/{ln}",
    params: {
        fn: {value: 'foo'},
        ln: {value: 'bar'}
    },
    templateUrl: "partials/customerSearch.html",
    controller:  "CustomerSearchCtrl"
})

答案 2 :(得分:3)

有更新,你可以这样做:

$stateProvider.state("foo", {
  url: "/search/{fn}/{ln}"
});

正如nateabele对有关可选参数的问题发表了评论:view here