如何在升级到 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');
}
这解决了我们的目的。
谢谢
我正在升级现有的 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');
}
这解决了我们的目的。
谢谢