2016-07-01 7 views
0

각도 1.5를 사용하고 HTML에 조건부 특성을 조건부로 추가하려는 유스 케이스가 있습니다.각도 : HTML에 조건부 특성 추가

설명 : 조건이 true 인 경우 지시문 1과 지정 문 2를 특성으로 추가하려고합니다.

<ng-form class="myForm" directive1 directive2> 

및 조건이 거짓 일 때, 나는 directive3 및 directive4을 원하지는

<ng-form class="myForm" directive3 directive4> 

내가 직접 조건부 논리를하고 시도 속성으로 추가 될하지만이 작동하지 않았다 :

<ng-form class="myForm" {{ condition ? directive1 directive2 :directive3 directive4 }}> 

누구나 쉽게 할 수있는 제안이 있습니까?

+0

특별히 directive1, directive2, directive3 및 directive4에 대한 사용 사례인가? 아니면 일반적으로? – gaheinrichs

+0

@gaheinrichs 나는 조건에 따라 적어도 두 개의 지시어를 추가하고 싶다. 이 지시문은 기본적으로 – vas

답변

0

ng-if를 사용하지 않는 이유는 무엇입니까?

<ng-form ng-if="condition" class="myForm" directive1 directive2> 
<ng-form ng-if="!condition" class="myForm" directive3 directive4> 
+0

양식에 유효성 검사를 추가하는 것으로 생각됩니다.하지만 문제는 ng-if가 ng-form에 있기 때문에 전체 양식을 숨길 수 있다는 것입니다. 이 문제를 해결하려면 아마도 ng-form 콘텐츠를 두 번 복제하여 피하고 싶을 것입니다. – vas

+0

흠, ng-form에 대한 논리를 포함하는 새로운 지시문을 만들지 않겠습니까? 그렇게하면 두 줄 밖에되지 않습니다. – derp

+0

동의하십시오! 그것은 코드 리팩토링을위한 좋은 생각이 될 것입니다. 그러나이 시점에서 나는 조건에 따라 폼의 유효성 검사를 위해 다른 지시어를 삽입 할 수 있다는 것에 대한 나의 문제에 대한 해결책을 찾고 있습니다. – vas

1

새로운 대답은

<ng-form class="myForm" ng-attr-directive1="{{condition}}" ng-attr-directive3="{{!condition }}"> 

ng-attr 당신에게 사건을 해결합니다. 조건을 검사하고 attr을 HTML 요소에 추가합니다.

ONE OLD

왜 당신은 지시 자체가 ng-show을 사용할 수 없습니다. condition을 확인하고 사실 인 경우에만 나타납니다.

+0

이것은 형식 검증을 위해 생성 된 재사용 가능한 지시어입니다. 이러한 모든 지시어를 변경하면이 새로운 조건을 고려하지 않는 것이 좋습니다. 조건에 따라 양식에 삽입 할 수있는 방법이 필요합니다. – vas

1

다른 지시문에 해당 지시문을 래핑 할 수 있습니다. 대답은 이미 거기에있다 :

Add directives from directive in 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); 
     } 
    }; 
    }); 
+0

이것은 좋은 제안 인 것 같습니다! 누군가가 더 밝은 아이디어를 가지고 있다면 나는 아마도 기다릴 것이다. – vas