【问题标题】:AngularJS HTML5 mode does a full page reload on manual url changeAngularJS HTML5 模式在手动 url 更改时重新加载整个页面
【发布时间】:2015-03-23 17:20:43
【问题描述】:



我正在将 AngularJS 与 ui.router 一起使用。我已经看到 Hashbang 和 HTML5 模式的行为差异,我想知道它是否可以更改/防止。 使用时

$locationProvider.html5Mode(true);

当我手动更改地址栏中的 url 时,会重新加载整个页面。 例如,如果我当前在 url 上

http://example.com/post/5467777

并手动将其更改为

http://example.com/post/5464777

发生拉页面重新加载,然后加载正确的状态。

如果我不使用 HTML5 模式,则不会发生完整页面重新加载,而是在更改 url 时直接加载状态(当然这要快得多)

http://example.com/#/post/5467777

换一个。 我的 HTML5 模式的服务器端配置如下:

# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.php [L]

我认为 AngularJS 也可以拦截这些 URL 更改。如果可能,如何在 HTML5 模式下手动更改网址时不重新加载页面?

谢谢

【问题讨论】:

    标签: angularjs apache .htaccess angular-ui-router angularjs-routing


    【解决方案1】:

    这里没有错。这是浏览器的预期行为。使用散列时,防止重新加载的事实是您在同一页面内请求一个部分(一个 id 等于散列的元素)(因此无需重新加载)。如果 URL 发生变化,浏览器只能认为这是一个新页面。

    当你点击一个页面时,angular会拦截点击并相应改变地址栏中的URL。

    【讨论】:

    • 会给出+1的澄清。我只是想知道这是否可以改变。无论如何,在现实生活中可能不会经常将网址手动更改为同一页面上的网址。
    • 嗯,它可以被window.onbeforeunload = function (e) {}拦截,但这只是期望返回一个确认消息,不能用于取消页面卸载。原因是如果浏览器允许这样做,有些人可能会阻止您离开他们的页面。
    • 好的,我明白了。而且,正如我所说,我所描述的情况无论如何都不会发生在实际使用场景中。
    猜你喜欢
    • 2017-09-12
    • 2020-02-16
    • 2017-01-08
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    相关资源
    最近更新 更多