Я недавно пришлось решать ту же проблему. Наконец, это сработало.
Первоначально мой код выглядит следующим образом:
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']
..now вы можете решить - что ставить в массив или что не ставить. например .:
if (includeUibInstance) dependencyInjection.push('$uibModalInstance');
if (includeUibInstance) {
dependencyInjection.push(PaymentConstructorWithUib);
} else {
dependencyInjection.push(PaymentConstructorNoUib);
}
..finally, мы должны объявить эти два новых условных функции:
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 = '';
...
Вот и все. Проверено. Работает как шарм.
У меня такая же проблема, и эта http://stackoverflow.com/questions/37767680/inject-uibmodalinstance-to-a-controllar-not-initiated-by-a-uibmodal помогает мне ее решить. –