【问题标题】:Wildcard * named group (:name*) not working with $routeProvider Angular js v1.0.6通配符 * 命名组 (:name*) 不适用于 $routeProvider Angular js v1.0.6
【发布时间】:2013-09-07 14:07:11
【问题描述】:

我正在尝试通过以下代码 sn-p 在 Angular js 中进行通配符 (*) 路由:

$routeProvider.when('/something/:action/:id/:params*\/', {

  templateUrl : "/js/angular/views/sample/index.html",

  controller : 'SampleCtrl'

}).otherwise({

  redirectTo: '/something/all' //This exists in real code

});

示例路径:/#/something/details/201/1

在调用这个 url 时,它会执行 else 方法。我在这里做错了什么? 提前致谢

【问题讨论】:

  • 1.2 及更高版本支持命名组(通配符 *)。我正在尝试 1.0.4

标签: javascript angularjs routes


【解决方案1】:

据我所知 angularjs 不支持正则表达式。 你应该看看 angular ui-router。

https://github.com/angular-ui/ui-router

【讨论】:

    【解决方案2】:

    $routeProvider 不支持标准正则表达式,但它支持命名组

    • path 可以包含以冒号 (:name) 开头的命名组。当路由匹配时,直到下一个斜杠的所有字符都匹配并存储在给定名称下的 $routeParams 中。

    • 路径可以包含以星号 (*name) 开头的命名组。当路由匹配时,所有字符都急切地存储在给定名称下的 $routeParams 中。

    所以你应该试试

    $routeProvider.when('/something/:action/:id/:params/*rest'

    将匹配/#/something/details/201/1/whatever/you/say

    【讨论】:

    • 它会匹配/#/something/details/201/1//#/something/details/201/1 吗?我有一个名为“资产”的模块,并希望它响应 /#/public/assets -- /#/user/:id/assets -- 和简单的 /#/assets 之类的东西。 /#*/assets 会匹配这些吗?我能否获得 :id 作为 routeParam?
    • 没有。您必须明确定义一个单独的路由,包括:id
    【解决方案3】:

    你可以使用

    $routeProvider.when('/something/:action/:id/:params?,
    

    【讨论】:

    • 您能解释一下这个答案吗?谢谢!
    • 参数存在与否都有效。所以它可以与 /something/:action/:id/:params 或 /something/:action/:id/ 一起使用
    • 不鼓励仅使用代码的答案,并且可能会导致删除标记 - 在您的答案中包含解释或评论将有助于人们学习,并使您的答案在搜索引擎上更加可见!
    猜你喜欢
    • 2015-09-05
    • 1970-01-01
    • 2013-04-16
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多