Я хотел бы отобразить список объектов с моего контроллера с помощью директивы. Внутри этой директивы я хотел бы использовать одну из нескольких возможных директив, но я не всегда буду знать, какой из них. Если я задал это имя директивы в области контроллера, как я могу использовать его в шаблоне главной директивы?Могу ли я использовать произвольные директивы AngularJS внутри других директив?
Адрес plnkr с информацией ниже.
HTML:
<div ng-app="music" ng-controller="rock">
<h1>Favorite Bands</h1>
<prog></prog>
</div>
JS:
angular.module('music', []);
angular.module('music').controller('rock', ['$scope', function($scope){
$scope.directiveName = 'dinosaurs';
$scope.bands = [
{ name:'Rush'}, { name:'King Crimson' }, { name: 'Porcupine Tree'}, { name: 'Marillion'}];
}]);
angular.module('music').directive('prog', function(){
return {
restrict: 'E',
replace: true,
template: '<ul><li ng-repeat="band in bands"><{{directiveName}}>{{band.name}}</{{directiveName}}></li></ul>'
};
});
angular.module('music').directive('dinosaurs', function(){
return {
restrict: 'E',
transclude: true,
template: '<ng-transclude></ngtransclude> - DINOSAUR!'
};
});
В этом случае, я устанавливаю $scope.directiveName
к dinosaurs
, который является именем директивы я хочу использовать внутри основной, , называемый prog
.
В шаблоне prog
, я пытаюсь использовать интерполяцию, чтобы вставить имя директивы в скобки. Это, однако, выводит это:
- < динозавры> Rush
- < динозавры> King Crimson
- < динозавры> Porcupine Tree
- < динозавры> Marillion
Я также пробовал использовать имя класса в span:, и это вставляет «динозавры» в пролет как класс, но Angular не обрабатывает его как директиву.
Я не уверен, нужна ли мне область выделения, но из того, что я прочитал, я не думаю, что это важно. Я также новичок в переходе, но я думаю, что директива dinosaurs
должна отображать содержимое каждого элемента списка и добавлять «- ДИНОЗАВРЫ!». до конца.
Какова наилучшая практика перехода от имени одной директивы к другой?
Я смотрел на https://docs.angularjs.org/guide/directive и [посты Dan Wahlin по директивам] (http://weblogs.asp.net/dwahlin/создание пользовательского-angularjs-директивы-часть-2-изолят-сфера). Несколько тем, например [this one] (http://stackoverflow.com/questions/16787276/use-an-angular-directive-inside-another-directive), адресуют директивы внутри других директив, но не передают имена этих директив , –
, если вы сначала объявите директиву динозавров, это поможет? – dandavis
@ dandavis - Приятная мысль, но, видимо, нет. Я попробовал это на plnkr, но не повезло. –