我的情况需要使用uibModalInstance作为可选的注入器。 因为我需要为两个视图使用相同的控制器。一个是弹出视图,另一个是普通视图。当我使用弹出窗口时,它工作正常。在另一种情况下,它会抛出一个未知的喷油器错误。
任何人都可以帮助解决这个问题。
此致 Kiran Gopal
答案 0 :(得分:0)
您可以按如下方式将模块有条件地注入控制器。确保您已为该视图包含相关依赖项的javascript:
angular.module('myApp').controller('Controller',
['$injector', '$scope', '$http',
function($injector, $scope, $http) {
var uibModalInstance;
if (view1) {
uibModalInstance = $injector.get('uibModalInstance');
}
});
答案 1 :(得分:0)
我最近不得不解决同样的问题。最后,这有效。
最初,我的代码看起来像这样:
app.controller('PaymentController', ['$injector', 'PaymentService',
'$scope', '$rootScope', '$uibModalInstance', PaymentConstructor]);
function PaymentConstructor($injector, PaymentService, $scope, $rootScope, $modalInstance) {
$scope.view = '';
...and so on...
..并且要求是在控制器功能中有条件地拥有/不拥有$uibModalInstance
。
请改用:
app.controller('PaymentController', dependencyInjection);
其中dependencyInjection
是上面声明的数组变量:
var dependencyInjection = ['$injector', 'PaymentService', '$scope', '$rootScope']
..现在你可以决定 - 把什么放到数组或什么不放。 e.g:
if (includeUibInstance) dependencyInjection.push('$uibModalInstance');
if (includeUibInstance) {
dependencyInjection.push(PaymentConstructorWithUib);
} else {
dependencyInjection.push(PaymentConstructorNoUib);
}
..最后,我们需要声明这两个新的条件函数:
function PaymentConstructorNoUib($injector, PaymentService, $scope, $rootScope) {
PaymentConstructor($injector, PaymentService, $scope, $rootScope, null);
}
function PaymentConstructorWithUib($injector, PaymentService, $scope, $rootScope, $modalInstance) {
PaymentConstructor($injector, PaymentService, $scope, $rootScope, $modalInstance);
}
//original controller function:
function PaymentConstructor($injector, PaymentService, $scope, $rootScope, $modalInstance) {
// if $modalInstance is null then we are not in modal dialog
$scope.view = '';
...
那就是它。测试。像魅力一样。