У меня есть угловая директива <my-button>
, в которой мне нужно, чтобы она запускала другую директиву (my-fun-directive
) на выходе, поэтому я использую $compile
вместо директивы шаблон. К сожалению, похоже, что выполнение этого способа не позволяет передавать дополнительные атрибуты HTML или атрибуты ng-*
.Передача ng- * атрибутов на угловую директиву
Директива
app.directive('myButton', function ($compile) {
return {
restrict: 'E',
replace: true,
scope: true,
link: function (scope, element, attrs) {
var btnTxt = attrs.text || "";
scope.buttonInnerHtml = attrs.icon ? '<span class="glyphicon glyphicon-' + attrs.icon + '"></span> ' + btnTxt : btnTxt;
var template = '<button type="button" class="myCustomClass" ng-bind-html="buttonInnerHtml" my-fun-directive></button>';
var content = $compile(template)(scope);
element.replaceWith(content);
}
};
});
Использование
<my-button
icon="ok"
text="Save Changes"
class="anotherClass"
ng-hide="someProperty"
ng-click="myClickEvent()"
example-directive></my-button>
Выходной ток (разрывы строк добавлены для читаемости)
<button
type="button"
class="myCustomClass"
ng-bind-html="buttonInnerHtml"
my-fun-directive>
<span class="glyphicon glyphicon-ok"><span> Save Changes
</button>
Нужные Выходные (разрывы строк добавлены для читаемости)
<button
type="button"
class="myCustomClass anotherClass"
ng-bind-html="buttonInnerHtml"
ng-hide="someProperty"
ng-click="myClickEvent()"
my-fun-directive
example-directive>
<span class="glyphicon glyphicon-ok"><span> Save Changes
</button>
Обратите внимание на включение ng-*
атрибутов, дополнительная директива, и добавленный класс CSS. Как я могу заставить все это работать вместе?
почему вы говорите 'поэтому я использую $ компилировать вместо шаблона директивы. '? вы можете указать директиву, указанную в атрибуте template/templateUrl директивы. – ps0604
@ ps0604 Да, я знаю, но другая директива, которую я пытаюсь использовать, кажется, не работает, когда я делаю это таким образом ... возможно, мне нужно еще немного изучить эту другую директиву, прежде чем я обвиню ее эта директива, хотя ... –
почему вы не публикуете плунж? которые должны работать, у вас может быть другая проблема. – ps0604