ng-controller 即使正确调用也无法正常工作

ng-controller doesn't work even through it is called correctly

提问人:Internial 提问时间:2/21/2016 最后编辑:Paolo ForgiaInternial 更新时间:9/7/2017 访问量:830

问:

我测试了最基本的angularjs。我使用 nodejs、angularjs 和 html。

这是我的文件。https://github.com/internial/testnode_modules没有张贴b / c,太大了。

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

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

{{this.msg}}

{{msg}}

{{mainController.msg}}

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

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

JavaScript AngularJS node.js 控制器 客户端

评论

1赞 dotnetom 2/21/2016
你有 和 ,即 和。修复错别字,它应该可以工作ng-controller="mainController as main"app.controller("mailController", ...mainmail
0赞 Internial 2/21/2016
它仍然不起作用
0赞 Mhand7 2/21/2016
您是否尝试过在主控制器中使用 $scope 而不是这个?
0赞 Internial 2/21/2016
不,我没有使用范围。为什么要使用$scope?
0赞 Internial 2/21/2016
$scope是支架版本

答:

0赞 Zlatko 2/21/2016 #1

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

所以你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 目录或类似目录中,以将服务器模块与客户端分开,但这些与您的问题无关。

评论

0赞 Internial 2/21/2016
我已将 mailController 更改为 mainController,但它仍然不起作用。跆拳道
0赞 Zlatko 2/21/2016
你看到jsbin版本了吗?如果您直接复制粘贴这些值会怎样?
0赞 Zlatko 2/21/2016
发现您的问题,更新答案。
0赞 Internial 2/21/2016
我只使用 app.use(express.static()); 吗?
0赞 Internial 2/21/2016
express.static() 还服务器静态文件。这与我以前的代码有什么不同?@Zlatko
0赞 Tim Anishere 2/21/2016 #2

我建议你做以下事情..

在您的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))