提问人:Internial 提问时间:2/21/2016 最后编辑:Paolo ForgiaInternial 更新时间:9/7/2017 访问量:830
ng-controller 即使正确调用也无法正常工作
ng-controller doesn't work even through it is called correctly
问:
我测试了最基本的angularjs。我使用 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 }}
谁能告诉我我做错了什么?
答:
您还需要将控制器分配给正确的模块。
所以你index.html说:
ng-app="firstController"
事实上,你的模块就是这样称呼的。
var app = angular.module("firstController", []);
(旁注:也许我会将其重命名为 firstApp,因为它是整个应用程序的名称)。
现在,如评论中所述,将 mailController 重命名为 mainController,它应该可以工作。请看这个例子:
https://jsbin.com/caqohasoce/edit?html,js,output
编辑:刚刚看到您正在使用快递来提供此服务。而你唯一暴露的路由只给出 - 意味着ngapp.js永远不会到达浏览器:index.html
app.get('/', function( req, res) {
res.sendFile(path.join(__dirname + '/index.html'));
});
这里有两种方法可以解决这个问题。您可以使用 express.static 而不是直接提供文件:
app.use(express.static());
或者,您在这里甚至根本不需要表达。你可以用一个实际的HTTP服务器(如apache或nginx)来提供这些文件,也可以使用类似node module的东西:http-server
npm install http-server
node_modules/.bin/http-server .
它将提供您的文件而不是快递。
这里还有更多的事情要做,例如将其全部移动到 /public 目录或类似目录中,以将服务器模块与客户端分开,但这些与您的问题无关。
评论
我建议你做以下事情..
在您的ngapp.js文件中,将其重写为:
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")
ng-controller(mainController))
上一个:两个项目之间的请求和响应
评论
ng-controller="mainController as main"
app.controller("mailController", ...
main
mail