2016-02-11 3 views
3

У меня есть ситуация, когда необходимо использовать uibModalInstance в качестве дополнительного инжектора. Потому что мне нужно использовать один и тот же контроллер для двух видов. Одним из них является всплывающее представление, а другое - обычное представление. Когда я использую всплывающее окно, он работает нормально. В другом случае он бросает неизвестную ошибку инжектора.uibModalInstance как дополнительная услуга

Может ли кто-нибудь помочь в решении этой проблемы.

С уважением, Киран Gopal

+0

У меня такая же проблема, и эта http://stackoverflow.com/questions/37767680/inject-uibmodalinstance-to-a-controllar-not-initiated-by-a-uibmodal помогает мне ее решить. –

ответ

0

Вы можете придать модуль условно к контроллеру следующим образом. Убедитесь, что вы включили JavaScript для соответствующей зависимости для этой точки зрения:

angular.module('myApp').controller('Controller', 
    ['$injector', '$scope', '$http', 
    function($injector, $scope, $http) { 
     var uibModalInstance; 
     if (view1) { 
      uibModalInstance = $injector.get('uibModalInstance'); 
     } 
    }); 
+0

С помощью этого кода: '$ UMI = $ injector.get ('$ uibModalInstance'); $ UMI.close(); ' Получить эту ошибку' Ошибка: [$ injector: unpr] Неизвестный поставщик: $ uibModalInstanceProvider <- $ uibModalInstance' –

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'] 

..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 = ''; 
    ... 

Вот и все. Проверено. Работает как шарм.

+0

Не могли бы вы показать, как вы это используете? Где установлен 'includeUibInstance'? –

+0

@JoshNoe В принципе, это то, что вы можете увидеть здесь. Всего несколько строк над 'if (includeUibInstance) dependencyInjection.push ('$ uibModalInstance');' я устанавливаю 'includeUibInstance'' true' или 'false' в зависимости от другого условия, которое приходит из другого модуля. –

Смежные вопросы