【发布时间】:2015-06-15 08:10:01
【问题描述】:
我确信这个问题之前已经回答过了,但我不知道如何表达这个问题,所以我无法在 Google 上找到任何内容。
我正在使用 Node.js、Express 和 Angular 编写一个网站。我的 Angular 应用程序仅在我访问主页 127.0.0.1:8080 时加载。当我点击评论链接(比如127.0.0.1:8080/review/8ja9d8Kkjnmd)时,我成功地路由到我的下一个控制器和我的 Angular 应用程序中的下一页。但是,如果我手动输入 url 并按下回车键,node.js api 只会为我提供我为 Angular 应用程序提供服务的 JSON。
因此,Angular 应用程序采用此 JSON 并将其呈现给我的视图。我如何仍然通过手动输入 url 而不仅仅是 ping 节点 api 来加载角度页面?
我觉得这将是一个常见问题,我再次道歉,因为我确信它已经一次又一次地得到回答。
这是我的 Angular 应用程序的结构
public/js
├── app.js
├── appRoutes.js
├── controllers
│ ├── MainCtrl.js
│ └── ReviewCtrl.js
├── views
│ ├── index.html
│ ├── home.html
│ └── review.html
└── services
├── MainService.js
└── ReviewService.js
app.js 是:
// public/js/app.js
angular.module('sampleApp',
['ngRoute', 'appRoutes', 'MainCtrl','MainService','ReviewCtrl','ReviewService','underscore']);
appRoutes.js 是:
// public/js/appRoutes.js
angular.module('appRoutes', []).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider
// home page
.when('/', {
templateUrl: 'views/home.html',
controller: 'MainController'
})
.when('/review/:review_id', {
templateUrl: 'views/review.html',
controller: 'ReviewController'
})
.otherwise({redirectTo: '/'});
$locationProvider.html5Mode(true);
}]);
如果我需要发布更多代码,请告诉我。
【问题讨论】:
-
您可以使用
html5Mode(false),或者您必须更新您的服务器,以便为每个请求提供索引页面。 -
你的节点 api 也在 127.0.0.1:8080 上运行?并具有与您的角度应用程序相同的路由行为?如果您为了确定而禁用 html5 模式,它可能会有所帮助。 chrome 的 html5 模式也有问题。
-
将 html5 设置为 false 会失去哪些优势?
-
无论如何,这行不通。这只是通过点击链接或手动输入 url 使其到达未加载 angular 的位置。因此,在此之前,将通过单击链接而不是手动输入 url 来加载 angular。现在,在这两种情况下都不会加载 angular
-
不同之处在于没有它 url 在它们中使用哈希,如
#/routeName并且服务器在 url 中看不到虚拟目录
标签: javascript json angularjs node.js ngroute