角度路线 - 忽略不匹配的路径

时间:2014-05-07 08:48:13

标签: javascript angularjs angular-routing

Angular的ngRoute拦截了它不匹配的路径。有没有办法把它关掉?我错过了某种.otherwise('business as usual')

我正在使用$locationProvider.html5Mode(true),这是故意的。

默认情况下,

ui-router不会执行此操作。有一个.else(...)选项,但是如果你不打电话,ui-router让浏览器像往常一样处理不匹配的网址。这是我想要的行为;只是,ngRoute

示例:http://chbrown.github.io/sandbox/javascript/angular/routing.html

  • 该页面上的前两个链接按预期工作。
  • 第三个链接(" Elsewhere")应为404(如果您点击它然后在浏览器中提交网址或手动刷新,则会这样做。)

我认为ui-router是"对"在这种情况下的解决方案,但有没有办法让ngRoute与非ngRoute网站(本地)网址很好地搭配?

2 个答案:

答案 0 :(得分:1)

我已经非常确定ui-router已经有效取代ngRoutengRoute没有令人信服的情况,因为有ui-router),所以这里&#39 ;当我使用ui-router时,我正在处理超出范围的链接的方式:

app.config(function($stateProvider, $urlRouterProvider, $locationProvider) {

  $locationProvider.html5Mode(true);

  $urlRouterProvider.otherwise(function(injector, location) {
    // N.b.: arguments are not injected via usual Angular magic, thus no $'s;
    //     the second argument, location, is not the same as window.location

    // In my case, I want any urls that DON'T start with /admin to escape
    //     ui-router's control
    var path = location.path();
    if (!path.match(/^\/admin/)) {
      window.location = path;
    }
    // else: could redirect to some default /admin homepage or something
  });

  $stateProvider.state(...).state(...); // etc.

});

使用.html5Mode(true),有意义的是该库将捕获每个网址更改。我希望我不必使用window.location - 我可以从false返回.otherwise(),以表示我不希望ui-router处理请求 - 但我希望即使是这种情况,ui-router也会做同样的事情。

答案 1 :(得分:0)

解决此问题的一种可能方法是禁止链接重写。

$locationProvider.html5Mode({
  enabled: true,
  requireBase: false,
  rewriteLinks: false
});

通常,Angular拦截每个网址并重写它们,但是通过将rewriteLinks选项设置为false,您可以绕过此行为。

相关问题