Angular的ngRoute拦截了它不匹配的路径。有没有办法把它关掉?我错过了某种.otherwise('business as usual')
?
我正在使用$locationProvider.html5Mode(true)
,这是故意的。
ui-router
不会执行此操作。有一个.else(...)
选项,但是如果你不打电话,ui-router
让浏览器像往常一样处理不匹配的网址。这是我想要的行为;只是,ngRoute
。
示例:http://chbrown.github.io/sandbox/javascript/angular/routing.html
我认为ui-router
是"对"在这种情况下的解决方案,但有没有办法让ngRoute
与非ngRoute网站(本地)网址很好地搭配?
答案 0 :(得分:1)
我已经非常确定ui-router
已经有效取代ngRoute
(ngRoute
没有令人信服的情况,因为有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
,您可以绕过此行为。