【问题标题】:Angularjs url remove hash not using html5Angularjs url删除不使用html5的哈希
【发布时间】:2014-07-14 08:28:11
【问题描述】:

我知道从 AngularJs 路由 url 中删除“#”的一种可能方法是启用 html5 模式。喜欢:

$locationProvider.html5Mode(true) if window.history && window.history.pushState

这是可行的,但问题是当我点击菜单并切换到正确的页面并刷新它后,它显示模板丢失!我很确定这是因为刷新页面后,视图会自动加载带有 url 而不是 AngularJs 路由 url 的 rails 视图。 有人可以帮我吗?

【问题讨论】:

  • 检查您是否在主索引页面上正确设置了基本 href(即<base href=".">)。 Using $location 上的官方文档提供了更多信息。
  • @miqid 我知道我应该添加基本 href。从其他帖子中,每个人都说它需要 而不是 '.'。但值得一试。并且 url 变为 myworld.dev/#%2Fmy_favorites%2Fnovels 这意味着它不起作用。 也没有用。
  • 当然,"." 只是一个建议,如果最终为您工作,更喜欢/。奇怪的是,路由如何导致您的 URL 具有编码值(即 %2F,应该是正斜杠)。
  • @miqid 重点是即使我添加 并启用 html5Mode,它仍然会显示错误 - 缺少模板。我只能使用导航栏来重定向页面。刷新一次,错误又出现了。

标签: ruby-on-rails angularjs location-provider


【解决方案1】:

来自angular docs

服务器端
使用此模式需要在服务器端重写 URL,基本上您必须重写所有指向应用程序入口点的链接(例如 index.html)

原因是当您第一次访问页面 (/about) 时,例如刷新后,浏览器无法知道这不是一个真实的 url,所以它会继续加载它。但是,如果您首先加载了根页面和所有 javascript 代码,那么当您导航到 /about 时,angular 可以在浏览器尝试访问服务器并相应地处理它之前进入那里

感谢Reloading the page gives wrong GET request with AngularJS HTML5 mode

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2012-04-19
    • 2010-12-31
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多