Node.js应用程序中的Angular.js功能

时间:2015-07-06 10:44:41

标签: javascript angularjs node.js express

我有一个node.js应用程序,已经开发了几周时间。我想添加某些功能,如无限滚动,node.js中的包也需要angular.js。所以,我认为我会继续添加angular.js支持,以便可以通过angular.js页面提供一页(以及其他需要此类支持的页面)。

通过Internet提供的基本示例,我在/ views目录中创建了一个listAll.jade文件(我使用express-jade)。这是它的样子:

    html(ng-app='demoapp')
  head
    title List All Entries!
    link(href='//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css', rel='stylesheet')
    script(src='http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js')
    script(src='js/listAllEntries.js')
  body(ng-controller='GetAllEntries')
    div(ng-repeat='post in posts')
      | {{post}}

然后在/ public / js目录下,我添加了一个listAllEntries.js文件,以下是其内容:

var express = require('express');
var angular = require("angular");
var app = angular.module('geniuses', []);

app.controller('GetAllGeniuses', [
'$scope',
function($scope){
 // $scope.test = 'Hello world!';
 console.log("Here?...")
 $scope.posts = [
  'post 1',
  'post 2',
  'post 3',
  'post 4',
  'post 5'
];
}]);

最后,将它们连接在一起,在index.js文件中(我已将app.js重命名为index.js)我这样做了:

app.use(express.static(__dirname + '/public'));
app.use('/listAllEntries',function(req, res){
    res.render('listAllEntries', {});
});

但是,当我点击http://localhost:3001/listAllEntries时,我得到的只是{post}}在浏览器上。在.js文件中添加的console.log语句不会被打印,所以我假设没有加载js文件。

我已经查看了几乎所有的选项和查询,但无法解决这个问题。

1 个答案:

答案 0 :(得分:2)

此时Angular不是一个同构框架(虽然Angular 2的目的是)。因此,目前,您无法require('angular')并在服务器中呈现Angular模板。

相反,您可以通过常规脚本标记提供包含(a)Angular框架和(b)Angular应用程序的html文件(*.jade)。当在浏览器中加载此html文件时,浏览器会运行您的Angular代码,您将看到console.log

要获取Angular应用的帖子,您需要使用$http服务器来访问您的后端API(您的快速应用)。 API应该提供JSON,然后您的Angular应用程序将解析并添加到其模型($scope.posts)。