如何将'$ modalInstance'注入控制器?

时间:2014-02-26 23:20:40

标签: angularjs angular-ui

在我的应用程序中发现用户未登录后我想打开一个模态对话框:

  .when('/showtask/:id', {templateUrl: 'Home/Template/showtask', resolve: ShowTaskCtrl.resolve, access: { allowAnonymous: false },
            resolve: {
        userAuthenticated: ["$http", "$q", function ($http, $q) {
            var deferred = $q.defer();
            $http.get('/api/Authentication/UserAuthenticated').then(function (data) {

                if (data.data != "null") {
                    deferred.resolve(data.data);
                }
                else {

                    var modalInstance = {
                        templateUrl: 'Home/Template/loginfailed',
                        controller: 'ModalInstanceCtrl',
                        modalpart: ['modalpart', function (modalpart) {
                            return modalInstance;
                            }]
                    };
                    $modal.open(modalInstance);

                    deferred.reject();

                }   
            });
            return deferred.promise;

        }]

    }

由于它发生在路由更改上,我必须在实例中注入一个modalpart并在控制器中检索它。

var ModalInstanceCtrl = WorkerApp.controller('ModalInstanceCtrl', ["$scope", "modalpart", function ($scope, modalpart) {

但我一直收到这个错误:

  

未知提供者:modalpartProvider< - modalpart

我该如何解决这个问题?

P.S。我正在查看的原始代码在这里:http://angular-ui.github.io/bootstrap/(在模态下)

3 个答案:

答案 0 :(得分:9)

这个问题也有一段时间了。虽然您没有发布HTML,但这就是我的问题所在。确保你没有在你的DOM中命名控制器,这已经在$ modal.open()中为你处理了。

答案 1 :(得分:8)

我从来没有像你正在做的那样在路由更改中使用$modal服务,所以不确定它是如何工作的。然而,仅仅查看您的$modal代码看起来是错误的。正确的方法应该是:

var modalOptions = {
  templateUrl: 'Home/Template/loginfailed',
  controller: 'ModalInstanceCtrl'
};
$modal.open(modalOptions);

然后你的控制器定义:

WorkerApp.controller('ModalInstanceCtrl',
  ["$scope", "$modalInstance", function ($scope, $modalInstance) {
    // Do your stuff
  }]);

根据documentation$modal服务会自动处理向您的控制器注入$modalInstance

答案 2 :(得分:2)

我有同样的问题,我发现我注册的控制器运行了两次! 感谢@compguy,我删除了模板中的控制器名称。 我成功了!