我正在使用AngularJS 1.4.x和ui-router运行应用程序.在大多数情况下,一切正常并且如预期的那样.我的各个页面使用ui-sref来导航,页面按预期显示,并且显示的URL看起来正确.但是,如果我在任何页面上刷新页面(F5),则会导致404错误.输入URL不再有效.
可能涉及的事情:
>我打开了$locationProvider.html5Mode(true)标志
>我用
$rootScope.$on(‘$stateChangeStart’,function(event,toState,
toParams)
管理页面访问(身份验证)
>< base href =“/”>是
在我的index.html中因为html5Mode()没有它就无法工作
解决方法
答:您正在通过浏览器向服务器发送HTTP请求. GET /无论如何.因此,服务器需要为此请求设置路由,并使用index.html进行响应.目前,您获得的是404,因为您的服务器没有与GET /的请求匹配的路由.
问:为什么?
答:当您通过浏览器(而不是通过AJAX)发出请求时,您的浏览器将尝试显示对您的响应.防爆.如果响应是JSON,它将显示JSON.如果它是一个字符串,它会显示一个字符串.如果它是一个html页面,它会告诉你.你不能只为任何路由发回一个模板,因为如果你这样做,它只会渲染那个没有其他上下文的模板.您需要index.html来加载角度,运行您的控制器,将模板放在它的ui-view容器中等.
(将发送的是index.html,UI路由器将检查路由,发出对templateUrl的请求,运行控制器,然后再渲染它.)
问:怎么样?
答:这取决于a)你正在使用什么类型的服务器和b)你的文件结构.您可能希望在路由文件末尾的所有路由中捕获一些为index.html服务的路径.这就是我使用Node / Express的方式:
app.get('/*',function(req,res) { var url = path.resolve(__dirname + '/../client/index.html'); res.sendFile(url,null,function(err) { if (err) res.status(500).send(err); else res.status(200).end(); }); });