2015-12-10 3 views
0

Я использую угловой материал (AM), и я хочу передать внешний контроллер в $ mdDialog. В AM документации мы создаем диалог, как это:Контроллер впрыска с параметрами разрешения

function DialogController($scope, $mdDialog) { ... } 
... 
$mdDialog.show({ 
    controller: DialogController, 
    templateUrl: 'dialog1.tmpl.html', 
    parent: angular.element(document.body), 
    targetEvent: ev, 
    clickOutsideToClose:true 
}) 

Как вы можете видеть контроллер является функцией только в текущем контроллере, которые требуют $ mdDialog. Я хотел бы использовать внешний контроллер.

myApp.controller('ElementEditCtrl', function($scope, 
$rootScope, $stateParams, $filter, $state, ElementsService, element, personnes) { ... } 

Как вы можете видеть, у меня есть определенное решение в параметрах. На данный момент я использую сервис $ контроллера для создания экземпляра моего контроллера:

var ctrl = $scope.$new(); 
    $controller('ElementEditCtrl', {$scope: ctrl, personnes: EmployesService.get(), element: angular.copy($scope.element)}); 
    $mdDialog.show({ 
     controller: ctrl, 
     templateUrl: 'FrontEnd/App/views/ElementEditView.html', 
     parent: angular.element(document.body), 
     targetEvent: ev, 
     clickOutsideToClose: true, 
    }) 

И я эта ошибка в моем браузере консоли:

Ошибка: нг: areq Bad Довода Аргумент «Fn» не функция, полученная n

Мне нужно использовать внешний контроллер, потому что мне нужно открыть это диалоговое окно из разных представлений, и я не хочу дублировать код в каждом контроллере.

+0

Можете ли вы представить простой плункер, который воспроизводит ту же ошибку, которую вы получаете? –

ответ

1

сделать услугу и выставить эту функцию:

function createDialog($scope) { 
    return function() { 
    $mdDialog.show({ 
     scope: $scope.$new(), 
     templateUrl: 'some/temmplate.html, 
     clickOutsideToClose: true 
    }); 
    }; 

Затем просто вставить сферу контроллера создает диалоговое окно.

+0

Как я передаю свой внешний контроллер моему конструктору диалога? – Alexandre

+0

В вашем внешнем контроллере передается $ scope для создания функции Dialog, а затем диалог будет иметь доступ ко всем свойствам области. Если вы создали контроллер с синтаксисом controllerAs (скажем, controllerAs: 'vm'), вы можете получить к нему доступ из шаблона диалога с vm. Поэтому, если у вас есть в вашем контроллере this.title = «Мой контроллер», вы можете получить к нему доступ с помощью vm.title. – Sim

+0

большое спасибо! – Alexandre

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