如何将$ modalInstance注入我的控制器?

时间:2014-03-06 05:27:27

标签: angularjs angular-ui

我正在根据Google标准编写我的代码...甚至不确定这个语法是什么,但它与控制器的Angular-UI示例代码不同,我得到$ modalInstance的注入器错误:(

var myControllers = angular.module('myControllers', ['ngCookies','ui.bootstrap']);

myApp.controller('LoginDialogCtrl', ['$scope', '$modalInstance', 'Auth', function($scope, $modalInstance, Auth) {
  $scope.login = function() {
    // Close dialog
    $modalInstance.dismiss('Logged in');
  };
}]);

myApp.controller('AuthCtrl', ['$scope', '$modal', 'Auth', function($scope, $modal, Auth) {
  $scope.openLoginDialog = function () {
    var modalInstance = $modal.open({
      templateUrl: 'partials/auth/login.html',
      controller: myApp.LoginDialogCtrl,
      }
    });
  };
  ...
}]);

该对话框打开正常,但在用户登录后,我收到此行的注入错误:

myApp.controller('LoginDialogCtrl', ['$scope', '$modalInstance', 'Auth', function($scope, $modalInstance, Auth) {

我已经像这样测试了它似乎工作真的很烦人:

var ModalInstanceCtrl = function ($scope, $modalInstance) {
  $scope.ok = function () {
    $modalInstance.close();
  };

  $scope.cancel = function () {
    $modalInstance.dismiss('cancel');
  };
};

是否与我的控制器初始化方式有关,在初始化时它不知道$ modalInstance?我如何使这项工作?

2 个答案:

答案 0 :(得分:2)

请参阅此答案:AngularJS inject issue with Angular Bootstrap modal

我遇到了和你一样的问题。我在partial中有一个ng-controller指令。删除后,问题就消失了。

答案 1 :(得分:1)

有两件事引起我的注意。

  1. 您可以在控制器属性中使用 ModalInstanceCtrl 变量,因为它是一个函数。但是,如果您注册控制器,则无法使用 myApp.LoginDialogCtrl 。而是使用其名称“ LoginDialogCtrl ”。 像这样:

    controller: 'LoginDialogCtrl'  
    
  2. 我有点困惑你宣布模块 myControllers ,但后来在其他模块 myApp 上定义了控制器。在任何地方使用 myControllers 代替 myApp 似乎合乎逻辑。