错误:[ng:areq] Argument' Controller'不是一个功能,未定义

时间:2014-11-10 02:30:14

标签: angularjs

在实现对话框的模式时,我得到了Error: [ng:areq] Argument 'ModalInstanceCtrl' is not a function, got undefined。我在同一个.js文件中有两个控制器。该错误显示第二个控制器的名称。

ng-app包含在主html文件中。

<div ng-app = "LoginApp">
  <div ng-view>
    <!-- partial will go here -->
  </div>
</div>

角度路线

var LoginApp = angular.module('LoginApp', ['ngResource', 'ngRoute', 'ui.bootstrap'])
LoginApp.config(function($routeProvider, $locationProvider) {
  $routeProvider
    .when('/', {controller: LoginCtrl, templateUrl: '/js/templates/login.html'})
    .otherwise({redirectTo: '/'})
    $locationProvider.html5Mode({
      enabled: true,
      requireBase: false
    });
})

LoginCtrl.js文件

'use strict'

var LoginCtrl = ['$scope', '$modal', '$log', function($scope, $modal, $log) {
  $scope.authenticate = function(){

    var loginModal = $modal.open({
      templateUrl: 'login-modal.html',
      controller: 'ModalInstanceCtrl',
      resolve: {
        modalData: function () {
          return {
              user: {
                  name: '',
                  password: ''
              }
          };
        }
      }
    });

    loginModal.result.then(function (user) {
      $log.info("My name is:" + user.name);
    }, function () {
        $log.info('Modal dismissed at: ' + new Date());
    });
  }
}];

var ModalInstanceCtrl = ['$scope', '$modalInstance', 'modalData', function($scope, $modalInstance, modalData){

}];

LoginCtrl.js文件中,LoginCtrl没有显示此错误,但ModalInstanceCtrl的声明未定义。谁能让我知道为什么会这样呢。

1 个答案:

答案 0 :(得分:11)

$modal.open()的参数中,改变一下:

...
controller: 'ModalInstanceCtrl',
...

对此:

...
controller: ModalInstanceCtrl,
...

注意,没有控制器名称的引号,因为您希望AngularJS使用ModalInstanceCtrl变量,而不是使用angular注册的控制器。

或者,如果您想保留引号,可以使用AngularJS注册ModalInstanceCtrl,如下所示:

LoginApp.controller('ModalInstanceCtrl',  ['$scope', '$modalInstance', 'modalData', function($scope, $modalInstance, modalData){
  ...
}]);

无论哪种方式都可行。