Я использую угловой интерфейс. Я пытаюсь уменьшить html-кодирование, создавая многоразовые элементы с угловыми директивами. Я определенно что-то упускаю. Я хочу сделать следующее:
<modal modal-title="Some Title" button-text="Click Me">Modal Content</modal>
И я хочу, чтобы это выводило модальное окно и кнопку, поэтому вместо того, чтобы снова и снова добавлять всю эту разметку для модального окна, я мог просто использовать этот пользовательский элемент. Кажется, это работает, за исключением того, что я не могу понять, как получить содержимое внутри элемента. Вот основы того, что я делаю:
angular.module('app').directive('modal', function () {
return {
templateUrl: 'partials/modal.html',
restrict: 'E',
controller: 'modalController',
controllerAs: 'mCtrl',
transclude: true,
link: function postLink(scope, element, attrs) {
scope.buttonText = attrs.buttonText;
scope.modalTitle = attrs.modalTitle;
}
};
}).controller('modalController', function($scope,$modal,$attrs) {
var _this = this;
this.buttonText = $attrs.buttonText;
this.modalTitle = $attrs.modalTitle;
this.open = function () {
var modalInstance = $modal.open({
templateUrl: 'modal-content.html',
controller: 'ModalInstanceCtrl',
controllerAs: 'miCtrl',
resolve: {
modalTitle: function() { return _this.modalTitle; }
}
});
modalInstance.result.then(function (selectedItem) {
//something
}, function () {
console.info('Modal dismissed at: ' + new Date());
});
};
this.save = function() {
//something
};
}).controller('ModalInstanceCtrl', function ($scope, $modalInstance, modalTitle) {
this.modalValue = 1;
this.modalTitle = modalTitle;
this.ok = function () {
$modalInstance.close(this.modalValue);
};
this.cancel = function () {
$modalInstance.dismiss('cancel');
};
});
Вот шаблон (partials/modal.html)
<script type="text/ng-template" id="modal-content.html">
<div class="modal-header">
<h3 class="modal-title">{{miCtrl.modalTitle}}</h3>
</div>
<div class="modal-body"> {{ mCtrl.content }} </div>
<div class="modal-footer">
<button class="btn btn-primary" ng-click="miCtrl.ok()">OK</button>
<button class="btn btn-warning" ng-click="miCtrl.cancel()">Cancel</button>
</div>
</script>
<button class="btn btn-default" ng-click="mCtrl.open()">{{mCtrl.buttonText}}</button>
Как получить содержимое элемента в mCtrl.content? Остальное работает как положено, я просто что-то упускаю. Спасибо!
Изменить: кажется, мне нужно использовать трансклюзию, вот что я хочу сделать:
<div class="modal-body"><ng-transclude></ng-transclude></div>
Но я получаю такую ошибку, когда открываю модальное окно:
[ngTransclude:orphan] Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: <ng-transclude>
$modal
. Если, конечно, вы хотите использовать только небольшой набор шаблонов, то вы можете указать ID шаблона и использоватьng-include
в шаблоне модального окна. - person New Dev   schedule 12.05.2015<script type="text/ng-template" id="...">
- person New Dev   schedule 12.05.2015