如果参数包含Slash' /'那么使用StateProvider的路由将被重定向。

时间:2014-11-20 06:39:35

标签: javascript angularjs

我正在使用angularjs来创建页面。页面url配置了stateproviders。 URL包含一个参数。此参数有时会有斜线' /'标志。当参数路由中出现此斜杠符号更改为默认URL时。

我正在创建网站以在IIS中托管它。使用WCF服务。

请让我知道如何解决此问题以接受参数中的斜杠而不是重定向。

Config如下所示 -

$urlRouterProvider.otherwise("/");

$stateProvider
.state('Home', {
    url: "/",
    templateUrl: "Partials/Landing.html?",
})

  .state('Search', {
      url: "/search/:search",
      templateUrl: "Partials/Search.html?",
  })

当我使用以下参数调用搜索状态时,它会将其重定向到Home状态

<a ui-sref=".Search({search:spam/closed})" class="list-group-item"/>

OR

$state.go("Search", {"search" : "spam/closed"});

2 个答案:

答案 0 :(得分:1)

如果您打算将多个关键字分开为搜索值,我认为您应该尝试找到另一个字符来分隔它们(“垃圾邮件”和“已关闭”),因为斜杠/是保留的URL中的字符符合RFC1738

  

保留:

     

许多URL方案保留某些特殊含义的字符:它们在URL的特定于节点的部分中的外观具有指定的语义。如果在方案中保留对应于八位字节的字符,则必须对八位字节进行编码。字符“;”,“/”,“?”,“:”,“@”,“=”和“&amp;”是可以为方案中的特殊含义保留的字符。在方案中不得保留其他字符。

也许你可以使用别的东西并相应地爆炸字符串。

或者,如果您知道搜索变量的最大数量,则可以声明更多路径:search/:search1/:search2等。这不是一个非常灵活的解决方案,而angular不会路由通配符

答案 1 :(得分:0)

在某些版本的UI-Router中,您可以通过为参数指定“any”类型来完成此操作。请参阅UI-Router中的此问题:

  

我应该在0.2.13和0.2.15之间添加,ui-router用斜杠打破了查询字符串组件。在0.2.13中你可以得到这样的状态:

     

{{1}}

     

在0.2.15中,如果参数值中包含斜杠,它将不再有效:编码/解码往返将返回与原始值不同的结果,就像0.2中的路径组件已经被破坏一样。 13。

     

在0.2.15中你必须使用这样的任何类型:

     

{{1}}

为此感谢GitHub用户drothlis