当前位置: 首页 > 面试题库 >

在angularUI路由器中处理尾部斜杠

周作人
2023-03-14
问题内容

自从我开始解决这个问题已经有几个小时了,我似乎无法解决这个问题。

我有一个可能会导致用户实际输入URL的应用程序。在这种情况下,不难相信用户可能会输入斜杠。例如,

www.example.com/users/2和www.example.com/edit/company/123

应该与

www.example.com/users/2/和www.example.com/edit/company/123/

只需在客户端处理URL路由即可。我对处理资源/ API调用中的尾部斜杠不感兴趣。我只对处理浏览器中的斜线感兴趣。

因此,我研究并在网上找不到很多答案。他们中的大多数人把我带到了angular-ui路由器的FAQ部分。

https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-
Questions

他们在这里告诉我们写一条规则,这是我想做的,但是它似乎没有用,或者我做错了。

这是我添加代码的代码库。

http://plnkr.co/edit/fD9q7L?p=预览

我已经将此添加到配置中,其余的代码几乎是基本的东西。

$urlRouterProvider.rule(function($injector, $location) {
  //if last charcter is a slash, return the same url without the slash
  if($location.$$url[length-1] === '/') {
    return $location.$$url.substr(0,$location.$$url.length - 2);
  } else {
    //if the last char is not a trailing slash, do nothing
    return $location.$$url;
  }
});

基本上,我想使斜杠为可选,即地址栏中是否存在斜杠对加载的状态没有影响。


问题答案:

有链接到工作的punker

这是更新的规则定义:

  $urlRouterProvider.rule(function($injector, $location) {

    var path = $location.path();
    var hasTrailingSlash = path[path.length-1] === '/';

    if(hasTrailingSlash) {

      //if last charcter is a slash, return the same url without the slash  
      var newPath = path.substr(0, path.length - 1); 
      return newPath; 
    }

  });

这些链接现在将正常工作:

  <ul class="nav">
    <li><a ui-sref="route1">Route 1</a></li>
    <li><a ui-sref="route2">Route 2</a></li>
    <li><a href="#/route1/">#/route1/</a></li>
    <li><a href="#/route2/">#/route2/</a></li>
    <li><a href="#/route1" >#/route1</a></li>
    <li><a href="#/route2" >#/route2</a></li>
  </ul>

魔术可以这样定义:如果有更改,请返回更改后的值…否则不执行任何操作…
请参阅示例



 类似资料:
  • 问题内容: 例如,采取以下两条路线。 根据文档,可以理解以下内容: 在第一种情况下,对路线的请求将返回404响应。已验证。 在第二种情况下有效,并将重定向到 我想看到的行为是 “逆” 的 情况下,两个 行为。例如将重定向到而不是其他方式。有没有办法定义采取此行为的途径? 根据我的理解,可以在路由上设置有效地获得第一种情况下第二种情况下的相同行为,但是我想做的是获得重定向行为,以始终将其重定向到UR

  • 我正在使用OpenShift 4.3,我已经创建了带有主机名和路径的路由,如下所示 我使用 启动应用程序,它可以正确启动应用程序,但是如果我删除尾部斜杠并使用 它不起作用,它会给出应用程序不可用 即使我没有附加/到路由,我也希望启动应用程序。有办法吗?因为在OpenShift 3.11中,我们使用的是入口,它完全按照我们想要的方式工作。

  • 问题内容: 我正在使用AngularUI路由器,并且试图建立嵌套/子链接。 一切正常,但是如何在“联系人”选项卡中选择/激活链接? 基本上,我需要能够在加载“联系人”页面时选择/激活一个联系人链接。当前,由于某些原因,除非我单击链接,否则它不会阅读。 柱塞:http ://plnkr.co/edit/DWjp5M6kJt2MyBrasfaQ?p=preview 问题答案: 有一种更快的方法可以做到

  • 问题内容: 我有一个带有服务的应用程序,该服务包装了我的API调用: 并且我正在使用UI-Router在状态之间进行转换: 我不再使用普通的AngularJS路由器,并且难以理解如何实现404。我可以看到抛出状态被拒绝,但是如何在状态路由器中捕获它呢? 问题答案: 仅当没有其他 路由 匹配时才调用该规则。您真正想要的是拦截事件,即在状态转换中出现问题(例如,解析失败)时触发的事件。您可以在状态更改

  • 我想重定向下的任何路径到静态应用。下面的视图应该捕获这些路径并提供相应的文件(它只打印本示例的路径)。这适用于,和。为什么路径会导致404错误?

  • 问题内容: 我正在使用Angular2开发NodeJS应用程序。在我的应用程序中,我有一个主页和搜索页面。对于主页,我有一个将为 localhost:3000 /* 呈现的HTML页面,并且从主页用户导航到 搜索, 即 我由 angular2路由 处理的 localhost:3000 / search 页面。 * 我没有搜索页面的页面,其视图由angular2呈现。但是当我直接点击 localho