当url键入时,AngularJS路由无法正常工作

时间:2016-01-26 16:48:29

标签: angularjs angular-routing

所以,我对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中托管代码。

1 个答案:

答案 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页面。