我正在使用Ionic框架构建混合移动应用程序,我将html5Mode设置为true,Ui-Router和gulp为我提供livereload,sass编译,css和javascript缩小。
问题是每当我直接从索引导航到状态时,一切正常,请求发送到我的服务器,但是当我刷新相同的状态时,我得到了无法获取错误。
我将我的Ionic应用程序与Express.JS应用程序分开处理。
这里有一些代码:
国
$stateProvider
.state('faculties', {
url: '/',
templateUrl: 'views/main/main.html',
controller: 'MainCtrl as main'
})
.state('faculty', {
url: 'faculties/:faculty',
templateUrl: 'views/faculty/faculty.html',
controller: 'FacultyCtrl as v'
})
所以,如果我打开页面并点击了将我带到教师队伍的按钮。国家,这一切都很好。但是,如果我刷新该页面,它会给我无法解决的错误。 以下是来自'教师的代码。国家控制员:
app.controller('FacultyCtrl', function ($http, $stateParams, appConfig) {
var v = this;
var api = appConfig.api;
v.faculty = {};
$http.get( api + '/faculties/' + $stateParams.faculty)
.then( res => {
v.faculty = res.data;
}).catch( error => {
console.log(error);
});
});
答案 0 :(得分:1)
您遇到的问题是您没有将所有可能的网址路由到同一个index.html
首次加载页面时,例如,网址为http://example.com/
,您的网络服务器将从您的根目录提供静态文件index.html
。更改路线时,您的网址最终为(例如)http://example.com/some_page
。这是有效的,因为URL是"伪造",服务器上没有这样的文件。刷新(或直接转到该URL)时,从服务器请求该URL失败(因为,与以前一样,该文件/文件夹不存在)。
您需要做的是将所有请求(不包括API和whatnot)路由到同一个静态index.html
,这是所有单页应用的标准行为:
路由在客户端完成。