ng-controller即使通过它也无法正常调用

时间:2016-02-20 20:22:46

标签: javascript angularjs node.js controller client-side

我测试了最基本的棱镜。我使用nodejs,angularjs和html。

这是我的档案。的 https://github.com/internial/test 即可。 未发布node_modules b / c它太大了。

在localhost:8080。这是我得到的输出。

{{1 + 64}}
{{main.msg}}

{{this.msg}}

{{msg}}

{{mainController.msg}}

Angular不起作用。但是,当我没有ng-controller和ng-app(初始化为空)时,它可以工作。但是我不能打电话给控制器。我只能做基本的{{1 + 64 }}

谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:0)

您还需要将控制器分配给正确的模块。

所以你的index.html说:

ng-app="firstController"

事实上,你的模块被称之为。

var app = angular.module("firstController", []);

(旁注:我可能会将其重命名为firstApp,因为它是整个应用的名称。)

现在,正如评论中所提到的,将mailController重命名为mainController,它应该可以工作。看一下这个例子:

https://jsbin.com/caqohasoce/edit?html,js,output

编辑:刚看到您正在使用快递来提供此功能。而且你唯一暴露的路线只会提供index.html - 意味着ngapp.js永远不会到达浏览器:

app.get('/', function( req, res) {
  res.sendFile(path.join(__dirname + '/index.html'));
});

以下是解决此问题的两种方法。您可以使用express.static而不是直接提供文件:

app.use(express.static());

或者,你甚至不需要在这里表达。您可以使用实际的HTTP服务器(如apache或nginx)来提供这些文件,也可以使用类似http-server节点模块的内容:

npm install http-server
node_modules/.bin/http-server .

它会为您的文件提供服务而不是快递。

此处还有其他事情要做,例如将其全部移动到/ public目录或类似内容中,将服务器模块与客户端分开,但这些与您的问题无关。

答案 1 :(得分:0)

我建议您执行以下操作..

在你的ngapp.js文件中重写它:

def bar
  super || Bar.last
end

在你的标记重写中:

var app = angular.module("firstController", []);
        app.controller("mainController", function($scope) {
            $scope.msg = "Hello from NG controller";
        });

提示:由于它是一个应用程序,而不是<!DOCTYPE html> <html ng-app="firstController"> <head> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.8/angular-route.min.js"></script> <script src="ngapp.js"></script> </head> <body ng-controller="mainController"> {{1 + 64}} <h3>{{msg}}</h3> </body> </html> 将其重命名为ng-app="firstController"

检查拼写ng-app="firstApp",并在标记中找到(app.controller("mailController")