为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕虎7371278 2019-06-13 14:41:29
控制器不是函数,而是未定义的,同时全局定义控制器。我正在使用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>
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

对于角1.3+,您不能再在全局范围上使用全局控制器声明(无需显式注册)。您需要使用module.controller语法。

例子:-

angular.module('app', [])
    .controller('ContactController', ['$scope', function ContactController($scope) {
        $scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];

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

        };
    }]);

function ContactController($scope) {
    $scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];

    $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();
    }]);

以下是角源的评论:-

  • 检查具有给定名称的控制器是否通过

    $controllerProvider

  • 检查当前作用域上的字符串是否返回构造函数
  • 如果$控制员提供#lowGlobals,请检查

    window[constructor]

    在全球

    window

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

额外检查:-

  • 请务必将名称放入ng-app关于角根元素的指令(例如:-html)也是。示例:-ng-app=“myApp”

  • 如果一切都很好,而且您仍然会遇到问题,请记住要确保脚本中包含了正确的文件。

  • 您没有在不同的地方两次定义相同的模块,这会导致先前在同一模块上定义的任何实体都将被清除,例如angular.module('app',[]).controller(..再一次在另一个地方angular.module('app',[]).service(..(当然,这两个脚本都包括在内)可以导致模块上先前注册的控制器。app第二次重新设计模块将被清除。


查看完整回答
反对 回复 2019-06-13
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

我遇到这个问题是因为我在闭包中包装了一个控制器定义文件:

(function() {
   ...stuff...});

但我忘了实际调用闭包来执行定义代码,并告诉Javascript我的控制器存在。即,上述需要:

(function() {
   ...stuff...})();

注意结尾处的()。


查看完整回答
反对 回复 2019-06-13
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

我是一个角度初学者,我做了一个基本的错误,没有将应用程序名包含在角根元素中。因此,将代码更改为

<html data-ng-app>

<html data-ng-app="myApp">

为我工作过。@PSL,已经在他上面的回答中提到了这一点。


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 815 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信