Я использую Angular 1.5, и у меня есть вариант использования, где я хочу добавить атрибуты директивы в HTML условно.
Чтобы проиллюстрировать: если условие истинно, нужно, чтобы директива1 и директива2 были добавлены как атрибут.
<ng-form class="myForm" directive1 directive2>
и когда условие ложно, я хочу, чтобы директива3 и директива4 были добавлены как атрибут
<ng-form class="myForm" directive3 directive4>
Я попытался сделать условную логику напрямую, но это не сработало:
<ng-form class="myForm" {{ condition ? directive1 directive2 :directive3 directive4 }}>
Есть ли у кого-нибудь предложение сделать это легко?
Новый ответ
<ng-form class="myForm" ng-attr-directive1="{{condition}}" ng-attr-directive3="{{!condition }}">
ng-attr
решит вам случай. Он проверяет условие и добавляет attr к элементу HTML.
СТАРЫЙ
почему вы не можете использовать ng-show
в самой директиве. Он проверит condition
и появится, только если это правда.
Вы можете попробовать обернуть эти директивы в другую директиву. Для этого уже есть ответ:
Добавить директивы из директивы в AngularJS
Я добавляю этот код из другого ответа:
angular.module('app')
.directive('commonThings', function ($compile) {
return {
restrict: 'A',
replace: false,
terminal: true,
scope: {
condition: '='
},
priority: 1000,
link: function link(scope,element, attrs) {
if(!scope.condition){
element.attr('directive1', '');
element.attr('directive2', '');
}else{
element.attr('directive3', '');
element.attr('directive4', '');
}
element.removeAttr("common-things"); //remove the attribute to avoid indefinite loop
element.removeAttr("data-common-things"); //also remove the same attribute with data- prefix in case users specify data-common-things in the html
$compile(element)(scope);
}
};
});
Почему бы не использовать ng-if?
<ng-form ng-if="condition" class="myForm" directive1 directive2>
<ng-form ng-if="!condition" class="myForm" directive3 directive4>