突破AngularJS 1.2和1.4之间的变化?

时间:2015-05-30 17:57:31

标签: javascript angularjs angularjs-controller

以下代码在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

2 个答案:

答案 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() {
  // ...
}]);