Angularjs Angular.js中的多个可选参数

Angularjs Angular.js中的多个可选参数,angularjs,angularjs-routing,Angularjs,Angularjs Routing,我通常使用querystring来过滤结果,例如: URL: /Events/List?type=art&city=miami&life=present URL: /Events/List?city=miami&life=present&type=art URL: /Events/List?life=present&type=art&city=miami 我可以将它们按任何顺序排列,并得到相同的结果,例如: URL:

我通常使用querystring来过滤结果,例如:

 URL:    /Events/List?type=art&city=miami&life=present
 URL:    /Events/List?city=miami&life=present&type=art
 URL:    /Events/List?life=present&type=art&city=miami
我可以将它们按任何顺序排列,并得到相同的结果,例如:

 URL:    /Events/List?type=art&city=miami&life=present
 URL:    /Events/List?city=miami&life=present&type=art
 URL:    /Events/List?life=present&type=art&city=miami
我也可以让它们成为可选的,例如:

 URL:    /Events/List?type=art, 
  or:    /Events/List?type=art&life=&city=

问题:如何使用Angular.js路由实现相同的“效果”?考虑到参数在Angular中以“RESTful”方式传递的事实

我是这样想的:

 URL:   /Events/List/city/miami/life/present/type/art
 .when('/Events/List/city/:city?/life/:life?/type/:type?', { ... }
我可以通过这样的路线实现:

 URL:   /Events/List/city/miami/life/present/type/art
 .when('/Events/List/city/:city?/life/:life?/type/:type?', { ... }
但我已经看到了很多问题:

  • 参数的顺序很重要(我必须多次定义路线?)
  • 可选参数将提供一个非直观的URL,
    例如:
    /Events/List/city/life/type/art


    在可选的查询字符串中情况并非如此(我认为它们更直观):
    例如:
    /Events/List/?city=&life=&type=art

  • 您可以将$routeParams注入控制器。以下是文档中的一个示例:

    // Given:
    // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
    // Route: /Chapter/:chapterId/Section/:sectionId
    //
    // Then
    $routeParams ==> {chapterId:1, sectionId:2, search:'moby'}
    

    我最近遇到了类似的需求(能够从路径中获取未知数量的参数),我从查看$routeProvider开始。我最终放弃了这一努力,转而选择了

    对您来说,最强大(但可能也是最乏味)的方法是使用。考虑下面的(我正在编写的一些代码的片段):


    第二个状态接受两个位置参数:一个
    插件
    和一个
    路径
    path
    参数是一个通配符,它获取前一个斜杠后面的所有内容。这里的想法是,我可以指定类似的内容,并在
    $stateparms[“plugin”]
    中使用“MyFirstPlugin”,在
    $stateparms[“path”]
    中使用“level1/level2/level2.php”。处理长路径参数取决于应用程序逻辑(同样,您也将负责使用此可变长度参数),但这种方法确实允许您为未知数量的url路径编写单个状态处理程序。

    如果要使用查询字符串,请使用
    $location.search()
    这既是一个setter,也是一个getter

    角度
    search
    和窗口版本
    location.search
    之间的区别在于查询落在url哈希之后,在设置或获取时使用对象而不是字符串


    请参见《开发人员指南》

    中的内容,根据参数的不同,是否需要不同的路由?不,我希望所有这些路由都有一个控制器,就像在ASP.NET MVC中一样,我有一个操作接收所有这些GET参数标记为已接受,因为它澄清了我仍然可以使用查询字符串和angular的URL组合,也就是说:
    #/bla/bla?bla=bla