2014-12-03 2 views
1

격리 범위가있는 지시문이 있습니다. 이 같은 속성의지시문의 선택적 속성

app.directive('myDirective', function() { 
    return { 
     restrict: 'E' 
     scope: { 
      attr1: "=", 
      attr2: "@", 
      attr3: "&" 
     }, 
     template: 
      <div> 

       <button ng-if="{true if attr3 is defined, otherwise false}"/> 

      </div> 

    }; 
}); 

한 - attr3, 콜백입니다 - 선택 사항입니다. 내가 원하는 것은 속성이 존재하면 버튼이 존재하고 그렇지 않으면 버튼이 존재하지 않는다는 것입니다. 당신의 도움을 주셔서 감사합니다. 분리 된 범위에 정의 p: "@"p: "=" 유형 매개 변수에 대한

+0

당신은'ng-if = "optionalAttr"'을 시도 했습니까? –

+1

그리고 만약 앞의 주석이 부울로 강제 변환 만한다면 : ng-if = "!! optionalAttr" – Rasalom

+0

Nope. 둘 다 작동하지 않았다. 'optionalAttr'는 메소드를 기대합니다. – menorah84

답변

3

, 당신은 할 수 : 각도이 매개 변수에 대한 콜백 함수 래퍼를 할당 때문입니다 그래서

<div ng-if="p">p is defined</div> 

p: "&"의 경우이, 작동하지 않을 것입니다 항상 정의됩니다. 속성이 지정되지 않은 경우 테스트하려면, 당신이 그렇게처럼 link 함수에 전달 된 attrs 매개 변수를 사용할 수 있습니다

link: function(scope, elem, attrs){ 
     scope.hasP = attrs.p !== undefined; 
} 

그런 다음 지시어의 템플릿에 당신은 할 수 :

<button ng-if="hasP" ng-click="p()"> 

을 여기 있어요 plunker을 참조하십시오.

관련 문제