控制器不是函数,未定义,但在全局定义控制器时

yokks:

我正在使用angularjs编写示例应用程序。我在chrome浏览器上遇到以下错误。

错误是

错误:[ng:areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined

呈现为

参数“ ContactController”不是函数,未定义

<!DOCTYPE html>
<html ng-app>
<head>
    <script src="../angular.min.js"></script>
    <script type="text/javascript">
        function ContactController($scope) {
            $scope.contacts = ["[email protected]", "[email protected]"];

            $scope.add = function() {
                $scope.contacts.push($scope.newcontact);
                $scope.newcontact = "";                 
            };
        }    
    </script>    
</head>

<body>    
    <h1>  modules sample </h1>

    <div ng-controller="ContactController">
        Email:<input type="text" ng-model="newcontact">
        <button ng-click="add()">Add</button>

        <h2> Contacts </h2>
        <ul>
            <li ng-repeat="contact in contacts"> {{contact}} </li>
        </ul>    
    </div>
</body> 
</html>
PSL:

使用Angular 1.3+,您将无法再在全局范围内使用全局控制器声明(无显式注册)。您将需要使用module.controller语法注册控制器

例:-

angular.module('app', [])
    .controller('ContactController', ['$scope', function ContactController($scope) {
        $scope.contacts = ["[email protected]", "[email protected]"];

        $scope.add = function() {
            $scope.contacts.push($scope.newcontact);
            $scope.newcontact = "";

        };
    }]);

要么

function ContactController($scope) {
    $scope.contacts = ["[email protected]", "[email protected]"];

    $scope.add = function() {
        $scope.contacts.push($scope.newcontact);
        $scope.newcontact = "";
    };
}
ContactController.$inject = ['$scope'];
angular.module('app', []).controller('ContactController', ContactController);

这是一个重大更改,但可以通过使用来关闭以使用全局变量allowGlobals

例:-

angular.module('app')
    .config(['$controllerProvider', function($controllerProvider) {
        $controllerProvider.allowGlobals();
    }]);

这是来自Angular的评论:

  • 检查给定名称的控制器是否通过注册 $controllerProvider
  • 检查在当前作用域上评估字符串是否返回构造函数
  • 如果$ controllerProvider#allowGlobals,检查window[constructor]全局window对象(不推荐)
 .....

expression = controllers.hasOwnProperty(constructor)
            ? controllers[constructor]
            : getter(locals.$scope, constructor, true) ||
                (globals ? getter($window, constructor, true) : undefined);

其他一些检查:

  • 一定要确保将appname放在ng-app指令中,也要放在您的角根元素(例如:-)html例如:-ng-app =“ myApp”

  • 如果一切正常,但仍然遇到问题,请记住确保脚本中包含正确的文件。

  • 您没有在不同的位置定义两次相同的模块,这导致先前在同一模块上定义的任何实体都被清除,例如angular.module('app',[]).controller(..在另一个示例(又angular.module('app',[]).service(..包含两个脚本)中再次出现在示例可能导致先前在该模块上注册的控制器。模块app的第二次重新创建将清除该模块。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仍然让Controller不是函数,未定义,而我没有全局定义控制器

AngularJS控制器不是函数,未定义

参数控制器不是函数,未定义

未定义参数“控制器”

控制器从工厂收到未定义的调用函数

AngularJS显示了控制器的未定义函数

覆盖控制器时未定义的索引

注入控制器时服务未定义

在控制器中注入指令时,指令/控制器作用域未定义

AngularJS:使用Jasmine与控制器测试指令时控制器未定义

控制器xxx不是AngularJS中未定义的函数

AngularJS-错误控制器不是函数,未定义

带有“控制器”的参数不是函数,未定义

如何在 Angular 1.6 中加载控制器(参数“simpleController”不是函数,未定义)

为什么未定义控制器?错误:未定义的索引:控制器

中间件中未定义明确会话,但在控制器中定义

错误:即使在控制器中定义了函数,laravel 中的函数也未定义

AngularJS:指令将对象添加到 $scope 但在控制器中未定义

在使用Angular1 + ES6并将控制器作为类时,在控制器函数中未定义依赖项注入

AngularJS 1.3.7中未定义控制器

在角度控制器中未定义$ compile

未定义requirejs angularjs控制器

$ scope.data在控制器中未定义

Laravel 启动变量在控制器中未定义

rails link_to控制器方法未定义

控制器(CakePhp)中的未定义索引

控制器中的数据未定义

找不到AngularJS控制器,未定义

TypeError:无法读取未定义的属性“控制器”