【问题标题】:AngularJs Routes and RefreshingAngularJs 路由和刷新
【发布时间】:2016-01-30 11:02:52
【问题描述】:

Routes 是我在 AngularJs 中使用的,通过 ajax 调用异步加载动态内容。我就是这样做的:

var $app = angular.module('app', ['ngRoute']);

$app.config(["$routeProvider", "$locationProvider", function ($routeProvider, $locationProvider) {
  $routeProvider
    .when("/pop", {controller: "popCtrl", templateUrl: "partials/pop_test.html"})
    .when("/dashboard", {controller: "dashBoardCtrl", templateUrl: "partials/dashboard.html"})
    .otherwise({redirectTo: "/"})

    $locationProvider.html5Mode(true);
}])

我还设置了一个迷你导航,这样当我点击我的链接时,它会通过 templatrUrl 参数

加载这些部分
   <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/pop">Pop</a></li>
        <li><a href="/dashboard">Dashboard</a></li>
   </ul>

这一切都很好,当我点击我的链接时,它会加载我在 pop_test.html 和 dashboard.html

中设置的内容

现在我遇到的问题。

当你点击链接让我们说仪表板时,内容通过 ng-view 加载得很好,并且如果用户 重新加载或刷新页面,路由工作得很好并且您可以说 localhost/dashboard 它实际上会尝试转到该链接并找到一个以 / 之后的任何内容命名的文件,在这种情况下是名为仪表板的目录。

那么我该如何做到这一点,当用户刷新或重新加载页面时,他实际上并没有重新加载 /dashboard 页面,因此没有找到服务器错误页面。

【问题讨论】:

  • 如果您使用的是html5 mode,那么您需要为刷新/初始加载进行服务器配置。每次用户刷新/重新加载页面时都不可能不调用服务器。
  • 我不明白,当用户点击刷新时你不想刷新页面?为什么刷新与常规页面条目不同?您是否传递了一些您丢失的数据?
  • @Alberto I.N.J 你对服务器配置是什么意思?
  • @ Jony-Y 因为 URL 只是看起来改变了,但实际上并没有去任何地方,所以其他页面上的内容是通过 Ajax 在同一页面上加载的。因此,因为在加载部分加载时路由会使 URL 看起来像“localhost/dashboard”,如果您点击刷新,它实际上会尝试找到该目录中不存在的dashboard.html。仅在我从中加载部分 html 的部分文件夹中。
  • 没有让你感到抱歉,如果 url 改变了,那么你的控制器就会被调用,因为它连接到那个路由并且 html 被渲染了......你的意思是什么,只是看起来它改变了?你能提供一个plunker吗?

标签: javascript html ajax angularjs


【解决方案1】:

正如 Alberto 所说,服务器需要知道该做什么。在 Angular 的情况下,使用 $locationProvider.html5Mode(true); 时,所有内容都需要通过 index.html 进行路由,否则您将遇到现在的情况。

要解决这个问题,您需要添加一个服务器重写规则,您可以在ui-router's docs here 中找到它的解释以及不同的服务器版本。

您还可以像这样添加带有index.html 重写规则的.htaccess 文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^(.*) /index.html [NC,L]

【讨论】:

  • 我尝试在其中制作一个 .htaccess 文件,但它给了我这个错误: 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。请联系服务器管理员 you@example.com 并告知他们错误发生的时间,以及您所做的任何可能导致错误的事情。服务器错误日志中可能会提供有关此错误的更多信息。
  • @LucasSantos 您的index.html 和.htaccess 文件是否在根应用程序文件夹中?您需要确保最后一行指向您的索引文件。
  • 我只用 / 替换了 /index.html,它起作用了。非常感谢@Shane!
猜你喜欢
  • 2013-05-24
  • 2016-07-17
  • 1970-01-01
  • 2016-02-07
  • 2017-11-27
  • 2014-08-28
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多