错误:参数不是函数,未定义

Kev*_*ith 119 playframework angularjs

使用AngularJS和Scala Play,我收到了这个错误.

错误:参数'MainCtrl'不是函数,未定义

我正在尝试创建一个包含一周中几天的表格.

请看一下我的代码.我检查了控制器的名称,但这似乎是正确的.注意:此SO 答案中使用的代码

index.scala.html

@(message: String)

@main("inTime") {

<!doctype html>
<html lang="en" ng-app>
    <head>
        <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
    </head>
<div ng-controller="MainCtrl">
    <table border="1">
    <tbody ng-repeat='(what,items) in data'>
      <tr ng-repeat='item in items'>
        <td ngm-if="$first" rowspan="{{items.length}}">{{what}}</td>
        <td>{{item}}</td>
      </tr>
    </tbody>
  </table>
</div>
</html> 
}
Run Code Online (Sandbox Code Playgroud)

MainCtrl.js

(function() {
    angular.module('[myApp]', []).controller('MainCtrl', function($scope) {
        $scope.data = {
            Colors: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
        }
    });
}());
Run Code Online (Sandbox Code Playgroud)

Cha*_*ani 105

[]从模块的名称([myApp])中删除

angular.module('myApp', [])
Run Code Online (Sandbox Code Playgroud)

并添加ng-app="myApp"到HTML,它应该工作.

  • 当他说删除`[]时,他指的是第一个参数,其中OP有`[myApp]`而不是'myApp`.他不是在谈论第二个参数. (26认同)
  • 使用第二个参数`[]`表示您正在创建一个新模块.删除第二个参数表示您正在检索现有模块.所以检查的一种可能性是你是否两次调用`angular.module`,两次都包括第二个参数.如果是这样,后面的事件将覆盖第二个,隐藏控制器的任何定义直到那一点. (15认同)

ple*_*ock 77

第一. 检查controller路由定义中是否正确,与您定义的控制器名称相同

communityMod.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/members', {
        templateUrl: 'modules/community/views/members.html',
        controller: 'CommunityMembersCtrl'
      }).
      otherwise({
        redirectTo: '/members'
      });
  }]);

communityMod.controller('CommunityMembersCtrl', ['$scope',
    function ($scope) {
        $scope.name = 'Hello community';
    }]);
Run Code Online (Sandbox Code Playgroud)

此示例中的不同控制器名称将导致错误,但此示例是正确的

SECOND检查您是否导入了javascript文件:

<script src="modules/community/controllers/CommunityMembersCtrl.js"></script>

  • 根据我的经验,你的"第二个"总是问题所在.我经常忘记将控制器导入`index.html` (29认同)

小智 26

我有相同的错误消息(在我的情况下:"参数'languageSelectorCtrl'不是一个函数,未定义").

在与Angular种子的代码进行了一些繁琐的比较后,我发现我之前删除了对app.js中控制器模块的引用.(发现于https://github.com/angular/angular-seed/blob/master/app/js/app.js)

所以我有这个:

angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.directives'])

这失败了.

当我添加缺少的参考时:

angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.controllers', 'MyApp.directives'])

错误消息消失,Angular可以再次实现控制器.


Gau*_*rav 16

有时这个错误是由html中指定的两个 ng-app指令引起的.在我的情况下误我指定ng-app我的html标签,并ng-app="myApp"body这样的标签:

<html ng-app>
  <body ng-app="myApp"></body>
</html>
Run Code Online (Sandbox Code Playgroud)


leo*_*leo 6

这真的花了我4个小时(包括对SO的无休止搜索)但最终我发现了它:错误(无意中)我在某个地方添加了一个空间.

你能发现它吗?

angular.module('bwshopper.signup').controller('SignupCtrl ', SignupCtrl);

所以...... 4个小时后我发现它应该是:

angular.module('bwshopper.signup').controller('SignupCtrl', SignupCtrl);

几乎不可能只用肉眼看到.

这强调了修订控制(git或其他)和单元/回归测试的至关重要性.