如何在升级到 bootstrap 版本 2.3.0 时使用 $injector.get() 注入 uibModalInstance

How to inject uibModalInstance using $injector.get() while upgrading to bootstrap version 2.3.0

我正在升级现有的 modules/directives 那些正在使用 bootstrap(版本 0.11.0)以使用 bootstrap 2.3.0.我还需要向后兼容性以支持版本 0.11.0,因为该指令可以在我们使用 0.11.0 的其他地方使用。

指令一直使用$modal$modalInstance,现在分别是$uibModal$uibModalInstance,版本为2.3.0。

我正在使用以下方法,在模块中有条件地注入 $uibModal$uibModalInstance

 if ($injector.has('$modalInstance')) {
        $modalInstance = $injector.get('$modalInstance');
    } else {
        $modalInstance = $injector.get('$uibModalInstance');
    }

该方法适用于 $uibModal不适用于 $uibModalInstance。这是因为未定义 modalInstance 的提供程序。因此,最终出现以下错误:

Unknown provider: $uibModalInstanceProvider <- $uibModalInstance

有什么方法可以让我在运行时选择 $modalInstance$uibModalInstance 并注入它们吗?

您可以继续在代码中使用 $modalInstance。在映射注入时,您需要 $uibModalInstance 指向 $modalInstance。同样适用于 $uibModal$modal.

angular.module('myApp').controller('modalCtrl', ['$scope', '$uibModalInstance',
    function ($scope, $modalInstance) {

        $modalInstance.doSomething = function(param) {
           ...
        }

        ...

同样,您可以使用 $injector 语法(因为您似乎使用它)

时间很长,我想更新一下我们当时是如何解决这个问题的。

我们没有注入 $uibModalInstance 或 $modalInstance。相反,使用 $injector 在运行时识别:

 if ($injector.has('$modal')) {
              $modal = $injector.get('$modal');
          } else {
              $modal = $injector.get('$uibModal');
          }

这解决了我们的目的。

谢谢