猿问

控制器不是函数,而是未定义的,同时全局定义控制器。

控制器不是函数,而是未定义的,同时全局定义控制器。

我正在使用angularjs编写一个示例应用程序。下面提到了一个在Chrome浏览器上提到的错误。

错误是

错误:[Ng:areq]http:/errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=Not%20a%20 function%2C%20 get%20未定义

呈现为

参数‘ContactController’不是函数,未定义

电码

<!DOCTYPE html><html ng-app><head>
    <script src="../angular.min.js"></script>
    <script type="text/javascript">
        function ContactController($scope) {
            $scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];

            $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>


慕虎7371278
浏览 822回答 3
3回答

慕的地6264312

对于角1.3+,您不能再在全局范围上使用全局控制器声明(无需显式注册)。您需要使用module.controller语法。例子:-angular.module('app',&nbsp;[]) &nbsp;&nbsp;&nbsp;&nbsp;.controller('ContactController',&nbsp;['$scope',&nbsp;function&nbsp;ContactController($scope)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$scope.contacts&nbsp;=&nbsp;["abcd@gmail.com",&nbsp;"abcd@yahoo.co.in"]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$scope.add&nbsp;=&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$scope.contacts.push($scope.newcontact); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$scope.newcontact&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;}]);或function&nbsp;ContactController($scope)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$scope.contacts&nbsp;=&nbsp;["abcd@gmail.com",&nbsp;"abcd@yahoo.co.in"]; &nbsp;&nbsp;&nbsp;&nbsp;$scope.add&nbsp;=&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$scope.contacts.push($scope.newcontact); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$scope.newcontact&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;};}ContactController.$inject&nbsp;=&nbsp;['$scope'];angular.module('app',&nbsp;[]).controller('ContactController',&nbsp;ContactController);这是一个巨大的变化,但它可以关闭以使用全局allowGlobals.例子:-angular.module('app') &nbsp;&nbsp;&nbsp;&nbsp;.config(['$controllerProvider',&nbsp;function($controllerProvider)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$controllerProvider.allowGlobals(); &nbsp;&nbsp;&nbsp;&nbsp;}]);以下是角源的评论:-检查具有给定名称的控制器是否通过$controllerProvider检查当前作用域上的字符串是否返回构造函数如果$控制员提供#lowGlobals,请检查window[constructor]在全球window对象(不推荐)&nbsp;.....expression&nbsp;=&nbsp;controllers.hasOwnProperty(constructor) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;controllers[constructor] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;getter(locals.$scope,&nbsp;constructor,&nbsp;true)&nbsp;|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(globals&nbsp;?&nbsp;getter($window,&nbsp;constructor,&nbsp;true)&nbsp;:&nbsp;undefined);额外检查:-请务必将名称放入ng-app关于角根元素的指令(例如:-html)也是。示例:-ng-app=“myApp”如果一切都很好,而且您仍然会遇到问题,请记住要确保脚本中包含了正确的文件。您没有在不同的地方两次定义相同的模块,这会导致先前在同一模块上定义的任何实体都将被清除,例如angular.module('app',[]).controller(..再一次在另一个地方angular.module('app',[]).service(..(当然,这两个脚本都包括在内)可以导致模块上先前注册的控制器。app第二次重新设计模块将被清除。

幕布斯6054654

我遇到这个问题是因为我在闭包中包装了一个控制器定义文件:(function()&nbsp;{ &nbsp;&nbsp;&nbsp;...stuff...});但我忘了实际调用闭包来执行定义代码,并告诉Javascript我的控制器存在。即,上述需要:(function()&nbsp;{ &nbsp;&nbsp;&nbsp;...stuff...})();注意结尾处的()。

慕运维8079593

我是一个角度初学者,我做了一个基本的错误,没有将应用程序名包含在角根元素中。因此,将代码更改为<html&nbsp;data-ng-app>到<html&nbsp;data-ng-app="myApp">为我工作过。@PSL,已经在他上面的回答中提到了这一点。
随时随地看视频慕课网APP
我要回答