以下代码在Angular 1.2中有效但在1.4中出现错误错误:[ng:areq]参数'MyController'不是函数,未定义。代码来自“ng-book”一书,可在此处找到实时工作示例:http://jsbin.com/uHiVOZo/1/edit?html,output。
改变了什么?
<body>
<div ng-controller="MyController">
{{ clock }}
</div>
<script type="text/javascript">
function MyController($scope) {
$scope.clock = new Date();
var updateClock = function() {
$scope.clock = new Date();
};
setInterval(
function() {
$scope.$apply(updateClock);
},
1000
);
updateClock();
};
</script>
</body>
(将https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.js替换为jsbin链接中的https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0-rc.2/angular.js)
答案 0 :(得分:2)
我不知道Angular的任何版本都允许您在没有首先创建模块的情况下创建控制器。无论如何,实例化模块并注册控制器可以解决您的问题。 jsbin
将此添加到html中的应用程序decalartion:
ng-app="app"
修改你的剧本:
angular.module('app', []) // this creates a module
function MyController () { ... }
// register controller to module
angular.module('app').controller('MyController', MyController)
答案 1 :(得分:0)
见https://docs.angularjs.org/guide/migration
“从1.2迁移到1.3 控制器 由于3f2232b5,$ controller将不再在窗口上查找控制器。查看控制器窗口的旧行为最初打算用于示例,演示和玩具应用程序。我们发现允许全局控制器功能鼓励不良做法,因此我们决定默认禁用此行为。
要迁移,请使用模块注册控制器,而不是将它们公开为全局变量: “
在:
function MyController() {
// ...
}
后:
angular.module('myApp', []).controller('MyController', [function() {
// ...
}]);