在angularjs和node app

时间:2017-08-16 17:38:17

标签: angularjs node.js routing ngroute

我有

<base href="/!#/">

位于 index.html 文件的顶部。当我转到网址http://localhost:5000/时,一切正常,它会立即添加#!/,因此网址为http://localhost:5000/#!/,页面会按预期显示。

在服务器端,我有以下代码,允许我使用我的文件

app.use(express.static(path.join(__dirname, 'public')));

我的文件结构如下:

bookApp(folder)
  server.js
  public(folder)
    index.html
    app.js(ngRoute)
    views(folder)
    css(folder)
    controllers(folder)

我的AngularJS路由是:

(function () {
'use strict';

angular
    .module('app', [
        'ngRoute'
    ])
    .config(config);

function config ($routeProvider) {
    $routeProvider
        .when('/', {
            controller: 'PostsCtrl',
            templateUrl: 'views/posts.html'
        })
        .when('/register', {
            controller: 'registerCtrl',
            templateUrl: 'views/register.html'
        })
        .when('/login', {
            controller: 'loginCtrl',
            templateUrl: 'views/login.html'
        })
        .otherwise('/');
}
})();

第一页(views / posts.html)按预期加载,但是当我点击

<li><a href="/login" title="Login to bookApp">Sign in</a></li>

网址为http://localhost:5000/login,不像我想的那样http://localhost:5000/!#/login

并显示:

  

无法GET /登录

当我手动将网址更改为http://localhost:5000/#!/login时,它可以正常工作。

如何解决此问题?

我看到的唯一解决方案是删除<base>标记,并在href指令中手动添加!#中的每个链接。

1 个答案:

答案 0 :(得分:0)

您似乎忘记了ng-view指令:<div ng-view></div>,它是路由提供的内容的容器。如果您将所有内容都包含在一个文件中,请将其放在脚本上方。

您也可以尝试:

<ng-view></ng-view>
<div class="ng-view"></div>

您还在使用Angular 1吗?我知道这在技术上没有回答你的问题,但我强烈建议你开始使用最新的Angular。您仍然可以保留遗留代码,但它会使您正在做的事情变得更加清晰和清晰。