Javascript AngularJs路线和刷新

Javascript AngularJs路线和刷新,javascript,html,ajax,angularjs,Javascript,Html,Ajax,Angularjs,路由是我在AngularJs中使用的,通过ajax调用异步加载动态内容。我就是这样做的: var $app = angular.module('app', ['ngRoute']); $app.config(["$routeProvider", "$locationProvider", function ($routeProvider, $locationProvider) { $routeProvider .when("/pop", {controller: "popCtrl",

路由是我在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.htmldashboard.html中设置的内容

现在我遇到的问题是

当您单击lets say dashboard的链接时,内容通过ng view加载得很好,路由工作得很好,但是如果用户重新加载或刷新页面,并且您在lets say saylocalhost/dashboard上,它实际上会尝试转到该链接,并找到一个以您在/which之后拥有的任何内容命名的文件在本例中,是一个名为dashboard的目录


因此,当用户刷新或重新加载页面时,他实际上没有重新加载/dashboard页面,因此没有找到服务器错误页面。正如Alberto提到的,服务器需要知道该怎么做。在Angular的例子中,当使用
$locationProvider.html5模式(true)时,所有内容都需要通过
index.html
路由否则你会遇到你现在的样子

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

您还可以添加一个
.htaccess
文件,其中包含
index.html
的重写规则,如下所示:

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

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

如果您使用的是
html5模式
,则需要对刷新/初始加载进行服务器配置。每次用户刷新/重新加载页面时都不可能不调用服务器。我不明白,你想在用户单击“刷新”时不刷新页面吗?为什么刷新与常规页面条目不同?你在传递你丢失的数据吗?@Alberto I.N.J你说的服务器配置是什么意思?@Jony-Y因为URL看起来只是改变了,但实际上没有任何变化,其他页面上的内容都是通过同一页面上的Ajax加载的。因此,由于路由会使URL在加载分部文件时看起来像“localhost/dashboard”,如果要单击“刷新”,它将实际尝试查找该目录中不存在的dashboard.html。仅在我正在从中加载部分html的partials文件夹中。我不明白您的意思。抱歉,如果url更改,则会调用您的控制器,因为它已连接到该路由,并且html已呈现。。。你是什么意思,只是看起来它变了?你能提供一个plunker吗?我试着制作一个包含这个的.htaccess文件,它给了我这个错误:内部服务器错误服务器遇到内部错误或配置错误,无法完成你的请求。请与服务器管理员联系,you@example.com并告知他们错误发生的时间,以及您可能采取的任何可能导致错误的措施。有关此错误的详细信息可以在服务器错误日志中找到。@LucasSantos是您的
index.html
和根应用文件夹中的
.htaccess
文件吗?您需要确保最后一行指向您的索引文件。我用just/替换了/index.html,它成功了。谢天谢地!