【问题标题】:Argument 'AppCtrl' is not a function, got undefined, can't seem to fix参数“AppCtrl”不是函数,未定义,似乎无法修复
【发布时间】:2016-03-15 04:51:36
【问题描述】:

这是我的 angularApp.js:

var app = angular.module('intuo', ['ui.router','ngMaterial', 'ngAnimate']);

app.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {

    $stateProvider.state('home', {
        url : '/home',
        templateUrl : '/home.html',
        controller : 'MainCtrl'
    }).state('login', {
        url : '/login',
        templateUrl : '/login.html',
        controller : 'AuthCtrl',
        onEnter : ['$state', 'auth',
        function($state, auth) {
            if (auth.isLoggedIn()) {
                $state.go('home');
            }
        }]
    }).state('register', {
        url : '/register',
        templateUrl : '/register.html',
        controller : 'AuthCtrl',
        onEnter : ['$state', 'auth',
        function($state, auth) {
            if (auth.isLoggedIn()) {
                $state.go('home');
            }
        }]
    });

    $urlRouterProvider.otherwise('home');
}]);

这是我的 bootstrap.js 文件(基本上只是创建新模块):

angular.module('controllers', []);

这是我的 AppCtrl.js:

angular.module('controllers')
    .controller('AppCtrl', ['$scope', '$mdSidenav', 
        function($scope, $mdSidenav){
            $scope.toggleSidenav = function(menuId) {
              $mdSidenav(menuId).toggle();
            };
        }
    ]);

我拥有的其他控制器的示例(可能会给我同样的错误):

angular.module('controllers')
    .controller('NavCtrl', ['$scope', 'auth',
        function($scope, auth) {
            $scope.isLoggedIn = auth.isLoggedIn;
            $scope.currentUser = auth.currentUser;
            $scope.logOut = auth.logOut;
        }
    ]);

这是我的 index.html 文件,上面写着 AppCtrl 和 NavCtrl:

<body layout="column" ng-controller="AppCtrl">


  <md-toolbar layout="row">
    <div class="md-toolbar-tools">
      <md-button ng-click="toggleSidenav('left')" hide-gt-sm class="md-icon-button">
        <md-icon aria-label="Menu" md-icon="../images/menu.svg"></md-icon>
      </md-button>
      <a href="/#/">Intuo App</a>

    </div>
  </md-toolbar>
  <div layout="row" flex>
    <md-sidenav layout="column" class="md-sidenav-left md-whiteframe-z2" md-component-id="left" md-is-locked-open="$mdMedia('gt-sm')">
         <!-- <nav class="navbar navbar-default pull-right" >-->
              <ul  ng-controller="NavCtrl">
                <li ng-show="isLoggedIn()"><a>{{ currentUser() }}</a></li>
                <li ng-show="isLoggedIn()"><a href="" ng-click="logOut()">Log Out</a></li>
                <li ng-hide="isLoggedIn()"><a href="/#/login">Log In</a></li>
                <li ng-hide="isLoggedIn()"><a href="/#/register">Register</a></li>
              </ul>
          <!--  </nav>-->

    </md-sidenav>
    <div layout="column" flex id="content">
      <md-content layout="column" flex class="md-padding">
            <ui-view></ui-view>
      </md-content>
    </div>
  </div>

我得到的错误是: 错误:ng:areq 错误的论点

参数 'AppCtrl' 不是函数,未定义。

我环顾四周,但似乎无法让它发挥作用。

【问题讨论】:

  • 你是否在页面上包含了所有的脚本?
  • ... sigh 是的,没错。我忘了。无论如何它现在可以工作了谢谢:D

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-service


【解决方案1】:

您的两个控制器都属于controllers 模块,并且基本上您通过具有ng-app="intuo"ng-app="intuo" 模块在页面上初始化角度。但是intuo 没有包含controllers 模块(因此控制器无法访问您的intuo 模块,这就是为什么angular 会引发错误。)。您应该将Controller 模块包含到您的主模块intuo

代码

//initialize controller module first before intializing
angular.module('controllers', []);
var app = angular.module('intuo', ['ui.router','ngMaterial', 'ngAnimate', 'controllers']);

【讨论】:

  • 啊,是的,这似乎很明显。现在我得到了这样的结果:angular.module('controllers', []); angular.module('factories', []); var app = angular.module('intuo', ['ui.router','ngMaterial', 'ngAnimate', 'controllers', 'factories']); 我仍然遇到同样的错误:o
  • @Jepix 太棒了..在单独的 JS 中保持模块初始化是个好主意.. :)
  • 好的,我创建了 2 个新文件 Controllers.js 和 Factories.js,分别是 angular.module('controllers', []); && angular.module('factories', []);。我的 angularApp.js 文件现在看起来应该是这样的:var app = angular.module('intuo', ['ui.router','ngMaterial', 'ngAnimate', 'controllers', 'factories']); 现在我收到错误“模块'控制器'不可用!您拼错了模块名称或忘记加载它。如果注册模块,请确保您指定依赖项作为第二个参数。”我一定还是错过了什么。
  • @Jepix 看看你是否想注册具有依赖关系的模块,然后确保你要添加到依赖数组 [] 中的模块应该在注入 [] 之前初始化,你能仔细检查一下吗that..service 和控制器在var app = angular.module('intuo', ['ui.router','ngMaterial', 'ngAnimate', 'controllers', 'factories']); 执行此代码之前加载
  • 啊,对不起,我是智障,我忘了在我的 html 中包含这些文件...我应该把它纹在我的手臂上,因为每次我似乎都找不到解决方案问题是因为我忘记在我的 html 中初始化文件 <.>
【解决方案2】:

永远记得在每个文件中包含正确的脚本加载!忘记加载控制器和工厂会导致错误!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2016-10-28
    • 2016-12-17
    相关资源
    最近更新 更多