所以,我对AngularJS很新,我正在尝试在我的应用程序中使用AngularJs ngRoute。
当我从应用程序主页开始时,一切顺利:
http://localhost:8080/appName/
当我从这一点点击链接时,它可以顺利运行。
但是,当我输入一个我知道存在/工作的URL时,它会给我一个404错误。如果我通过使用应用程序而不是url转到该链接,它会加载正常,即使它具有相同的URL。
Eg. http://localhost:8080/appName/search
将提供404,即使这是默认重定向的相同网址。
实际上,通过输入位置加载的唯一网址是我上面提到的基本网址。
我的app.js看起来像这样:
app.config( ['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider){
$routeProvider
.when("/search", {
templateUrl: "search.html",
controller: "SearchController"
})
.when("/results", {
templateUrl: "results.html",
controller: "ResultsController"
})
.when("/browse", {
templateUrl: "browse.html",
controller: "BrowseController"
})
.otherwise({redirectTo:"/search"});
//This gets rid of the # on the urls to the templates
$locationProvider.html5Mode(true);
}]);
我在glassfish4服务器上托管这个。
我有什么明显的遗漏/误解ngRoute的工作方式吗?是否有一些我缺少的设置?
所有帮助表示赞赏......
编辑1:正如下面的@Matthew Green所说,我需要配置网络服务器以返回以下所有页面的index.html
http://localhost:8080/appName
我知道我在这里已经完全密集了,但这个配置在哪里?我在MAVEN Jersey-Quickstart-Webapp中托管代码。
答案 0 :(得分:2)
使用ngRoute时,您使用javascript处理路由以创建SPA。这意味着您需要点击一个真实页面,为您的应用程序加载路由,以了解要路由到哪个页面。
例如,您的http://localhost:8080/appName/
应该路由到您的index.html,其中包含您的路由的javascript。加载该页面后,它知道如何处理应用程序中的链接。但是,如果您直接转到http://localhost:8080/appName/pageName
,还需要加载index.html,因为它是加载路由的。加载路由后,它应该引导您进入应用程序中的正确页面。如果没有重定向,http://localhost:8080/appName/pageName
不是真正的页面,因此正确返回404。
了解这一点,您需要弄清楚的是,您必须为http://localhost:8080/appName/
下的所有内容配置相应的重定向以转到index.html页面。