Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 打破AngularJS 1.2和1.4之间的变化?_Javascript_Angularjs_Angularjs Controller - Fatal编程技术网

Javascript 打破AngularJS 1.2和1.4之间的变化?

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

以下代码适用于Angular 1.2,但在1.4中出现错误:[ng:areq]参数“MyController”不是函数,未定义。代码来自“ng book”一书,在这里可以找到一个实时工作示例:

什么改变了

<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版中,在没有应用程序模块的情况下声明一个控制器,并将其分配给全局名称空间,这将导致各种测试问题。我很高兴他们改变了。