【发布时间】:2015-01-25 21:43:18
【问题描述】:
这是我第一次使用 AngularUI Router,所以我想我犯了一个新手错误,希望有人能指导我。
我已经配置了一个单页应用程序以在 HTML5 模式下使用 Angular UI Router,而且一切似乎都按预期工作。
.config([
"$stateProvider", "$urlRouterProvider", "$locationProvider",
function ($stateProvider, $urlRouterProvider, $locationProvider) {
$stateProvider.state("concept", {
url: "/concepts/:conceptKey",
templateUrl: "/templates/concept-view.html",
controller: "conceptViewController",
resolve: {
concept: [
"$stateParams", "conceptsApi",
function ($stateParams, conceptsApi) {
return conceptsApi.getConcept($stateParams.conceptKey);
}
]
}
});
$urlRouterProvider.otherwise("/");
$locationProvider.html5Mode(true);
}
])
但是,同一页面还包含一些指向同一站点上其他静态页面的链接,这些链接使用相对 URL。在安装 Angular 路由之前,这些链接可以正常工作,但现在它们已损坏。具体来说,点击其中任何一个链接会正确更改浏览器地址栏,但不会触发导航到该目标页面。
我假设我需要添加一些内容来告诉路由配置忽略某些 URL 模式,但我没有找到任何信息来告诉我如何执行此操作。请问有什么建议吗?
谢谢, 蒂姆
【问题讨论】:
-
您的服务器端似乎没有配置好。无论如何,请检查 UI-Router 和 html5 的this link with example/plunker。如果服务器配置良好 - 这应该也可以。
-
感谢您的建议,但我不明白这如何适用于我的情况。 UI 路由对于与定义的状态配置对应的 URL 可以正常工作,但它会阻止导航到同一域上的静态页面。如果我直接从新的浏览器选项卡请求该静态页面,它会正确呈现,如果我禁用路由,它同样如此。该问题仅在路由处于活动状态时发生,其中 SPA 内针对 SPA 外部页面的所有链接都已损坏。
-
我想我现在明白了。然后(如果我理解你的问题)我会说,你只需要改变你的服务器部分。我正在使用 ASP.NET MVC ......这是一个我可以设置服务器如何对任何 url 作出反应的地方。有些重定向到 index.html...有些按预期提供。在那里检查...(链接如何在 mvc stackoverflow.com/a/27707238/1679310 中设置)
-
我也在使用 ASP.NET MVC,并且我创建了一个控制器操作,该操作被映射以响应 UI 路由方案使用的每个可能的 URL。无论 URL 是什么,它总是提供相同的响应,并且它依赖于客户端来解释 URL 并进行 API 调用来填充视图。如果我向此控制器操作发出请求,它总是按预期响应(使用 Fiddler 验证)。所以,在我看来,问题出在客户端。 UI 路由似乎阻止了浏览器遵循正常(非路由)的 URL,正如我所期望的那样。