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

Tim*_*sen 8 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;

        }]

    }
Run Code Online (Sandbox Code Playgroud)

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

var ModalInstanceCtrl = WorkerApp.controller('ModalInstanceCtrl', ["$scope", "modalpart", function ($scope, modalpart) {
Run Code Online (Sandbox Code Playgroud)

但我一直收到这个错误:

未知提供者:modalpartProvider < - modalpart

我怎么解决这个问题?

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

com*_*y24 9

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


Bey*_*ers 8

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

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

然后你的控制器定义:

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

根据文档,该$modal服务将自动处理对$modalInstance控制器的注入.

  • 谢谢你的帮助,但我仍然得到错误:[$ injector:unpr]未知的提供者:$ modalInstanceProvider < - $ modalInstance ...有没有其他方法可以实现我想要的? (2认同)