3

Я получил проблему, я пытаюсь получить экземпляр контроллера в моей службе:угловой - получить экземпляр контроллера в службе

myAppModule.service('modalService', 
function ($modal, $controller) { 
    var controller = $controller('ExperienceDetailsModalCtrl'); 
}); 

, но я получил ошибку: TypeError: Не удается прочитать свойство «$ объема» of undefined

Возможно ли получить доступ к контроллеру (определенному в другом файле) и передать его модальному?

Мой контроллер:

myAppIndexModule 
.controller('ExperienceDetailsModalCtrl', function ($scope) { 

}); 
+1

Почему вы хотите получить доступ к контроллеру внутри службы ?? Как правило, это один из способов, которым контроллер использует эту услугу, и это все, что является целью службы - предоставить службу контроллерам. –

+0

. Я хотел бы определить все мои модальности в одном месте - я хочу избежать передачи имени контроллера и шаблон каждый раз, когда я хочу открыть модальный. Поэтому я полагаю, что создание сервиса и функций для модалов - хорошая идея. Туда. Может быть, кто-то предложит мне лучший подход к этому? – jrola

ответ

4

Вы не можете получить доступ к области контроллера в service, factory или provider. Данные, которые вы хотите разделить, должны быть размещены внутри службы. & делают его доступным для другого контроллера.

Я думаю, что вы хотите передать область управления до $modal, тогда вы можете добиться этого, выполняя сам контроллер.

$modal.open({$scope: $controller('ExperienceDetailsModalCtrl', {$scope: $scope}), templateUrl: 'abc.html'}) 

Update

Вы можете сделать это, как показано ниже

myAppModule.service('modalService', 
function ($modal, $controller, $rootScope) { 
    var scope = $rootScope.$new(true); 
    $controller('ExperienceDetailsModalCtrl',{scope: $scope }); 
    //in scope now you will have ExperienceDetailsModalCtrl scope 
}); 
+0

Это хорошо работает. Но я хотел бы сделать это по-другому. Я хотел бы определить все мои модальности в одном месте - я хочу избегать передачи имени контроллера и шаблона каждый раз, когда я хочу открыть модальный. Поэтому я полагаю, что создание сервиса и функций для модалов - хорошая идея. Не могли бы вы дать мне совет, как его построить? – jrola

+1

@ Попробуйте мой обновленный ответ, его просто предложение может не работать –

+1

Отлично! Он работает (почти :). Когда я определяю свой контроллер таким образом: controller ('ExperienceDetailsModalCtrl', function(). Но когда я определяю его так: controller ('ExperienceDetailsModalCtrl', function ($ scope) - [with $ scope], я получил исключение : Неизвестный поставщик: $ scopeProvider <- $ scope. – jrola

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