2014-01-10 3 views
2

Я создал директиву под названием modalDialog, которая в основном является модальным диалогом. Он использует transclude, так что я могу позже сделать это в моем коде:Могу ли я изменить контроллер директивы для разных экземпляров директивы?

<div modal-dialog id="dialog" dialog-title="This is my Dialog"> 
    ... 
    here goes the content of the dialog 
</div> 

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

Я думал об упаковке модального диалога в div с установленным на нем контроллером. Например:

<div ng-controller="ThisInstanceController"> 
    <div modal-dialog id="dialog" dialog-title="This is my Dialog"> 
     ... 
     here goes the content of the dialog 
    </div> 
</div> 

Но мне это не совсем нравится. Есть ли более элегантный способ сделать это?

ответ

0

Посмотрите на Angular-UI мод. У них довольно элегантный способ использования модалов. Короче говоря, вы можете передать, какой контроллер вы хотите инициализировать, когда модаль открывается.

$scope.open = function() { 

    var modalInstance = $modal.open({ 
      templateUrl: 'myModalContent.html', 
      controller: ModalInstanceCtrl, 
      resolve: { 
       items: function() { 
        return $scope.items; 
       } 
      } 
     }); 

    modalInstance.result.then(function (selectedItem) { 
     $scope.selected = selectedItem; 
    }, function() { 
     $log('Modal dismissed at: ' + new Date()); 
    }); 
}; 

Приятная часть также позволяет передавать данные с разрешения между контроллерами.

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