Javascript 打破AngularJS 1.2和1.4之间的变化?
以下代码适用于Angular 1.2,但在1.4中出现错误:[ng:areq]参数“MyController”不是函数,未定义。代码来自“ng book”一书,在这里可以找到一个实时工作示例: 什么改变了Javascript 打破AngularJS 1.2和1.4之间的变化?,javascript,angularjs,angularjs-controller,Javascript,Angularjs,Angularjs Controller,以下代码适用于Angular 1.2,但在1.4中出现错误:[ng:areq]参数“MyController”不是函数,未定义。代码来自“ng book”一书,在这里可以找到一个实时工作示例: 什么改变了 <body> <div ng-controller="MyController"> {{ clock }} </div> <script type="text/javascript"> fu
<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>
{{时钟}}
函数MyController($scope){
$scope.clock=新日期();
var updatelock=function(){
$scope.clock=新日期();
};
设定间隔(
函数(){
$scope.$apply(updatelock);
},
1000
);
updatelock();
};
(在jsbin链接中替换为)我不知道Angular的任何版本允许您在不首先创建模块的情况下创建控制器。在任何情况下,实例化模块并注册控制器都可以解决问题 以html格式将此添加到您的应用程序中:
ng-app="app"
修改脚本:
angular.module('app', []) // this creates a module
function MyController () { ... }
// register controller to module
angular.module('app').controller('MyController', MyController)
看中
“从1.2迁移到1.3
控制器
由于3f2232b5,$controller将不再在窗口中查找控制器。在窗口中查找控制器的旧行为最初用于示例、演示和玩具应用程序。我们发现,允许全局控制器功能会鼓励不良做法,因此我们决定默认禁用此行为
要迁移,请向模块注册控制器,而不是将其公开为全局模块:
"
之前:
function MyController() {
// ...
}
之后:
angular.module('myApp', []).controller('MyController', [function() {
// ...
}]);
仅供参考,使用
$interval
服务,您可以更新$scope
,而无需使用$scope.$apply()
(编辑:错误的url)。angular现在可以基于参数名注入服务吗?或者控制器的第二个参数始终是$interval服务吗?angular“注册”、控制器、服务、过滤器、指令、配置的所有内容都可以以任意顺序将任意数量的“提供程序”作为参数。一旦你注册了你正在制作的任何东西(比如控制器),angular将注入该对象,就像$scope
这里有一个创建和注册服务的超级简单的例子,然后将其放入主控制器进一步阅读,下一节是关于模块的。显然,在Angular的1.2版中,在没有应用程序模块的情况下声明一个控制器,并将其分配给全局名称空间,这将导致各种测试问题。我很高兴他们改变了。