2016-10-03 3 views
0

본인의 지시문에서 NGIF를 래퍼 유형으로 사용하려고합니다. 사용자 지정 지시문 내부의 각도 호출 NGIF

나는 문제는 내가이 타이프 라이터로 변환하는 방법을 몰라 완벽하게 작동되는 다음의 예 ...

var NAME = 'yourCustomIf'; 

angular.module('myApp', []) 
.directive(NAME, function (ngIfDirective) { 
    console.log(ngIfDirective) 

    var ngIf = ngIfDirective[0]; 

    return { 
     transclude: ngIf.transclude, 
     priority: ngIf.priority, 
     terminal: ngIf.terminal, 
     restrict: ngIf.restrict, 
     link: function ($scope, $element, $attr) { 
      var value = $attr[NAME]; 
      var yourCustomValue = $scope.$eval(value); 

      $attr.ngIf = function() { 
       return yourCustomValue; 
      }; 


      ngIf.link.apply(ngIf, arguments); 
     } 
    }; 

}); 

을 발견했다. 여기에

export class MyCustomDirective implements ng.IDirective { 

    constructor(private ngIfDirective: ng.IDirective) { 

    } 

    transclude = this.ngIfDirective.transclude; 
    priority = this.ngIfDirective.priority; 
    terminal = this.ngIfDirective.terminal; 
    restrict = this.ngIfDirective.restrict; 

    link = (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, ctrl: any) => { 

     var atrribute = attrs["custom"]; 

     var value = scope.$eval(atrribute); 

     attrs["ngIf"] =() => { 
      return value; 
     }; 


    } 

} 

내 문제는 마지막 줄 ngIf.link.apply(ngIf, arguments); 함께 ... 내가 지금까지 무엇을합니다. 적용 방법은 없습니다.

+0

정확히 원하는 최종 결과는 무엇입니까 :

module.directive('specialIf', function (myService) { return { transclude: true, scope: {}, template: '<ng-transclude ng-if="isShown"></ng-transclude>' link: function (scope, element, attr) { scope.isShown = myService.isShown(); } }; }); 

귀하의 사용은 다음과 같을 것이다? 당신이 발견 한 발췌 문장은 매우 해키 롭고 원하는 것을하기위한 훨씬 더 깨끗한 방법 일 것입니다. 위의 코드는 기본 프레임 워크를 깊이 파고 그것에 대해 가정하고 완전히 다른 것으로 짜 맞추려 고 시도합니다. – Enzey

+0

기본적으로 내 자신의 my if 지시문을 만들고 싶습니다. 내 지시어는 결과를 결정하기 위해 각도 서비스에 대해 이야기 할 것입니다. ngif 지시어에 대한 래퍼를 만드는 것이 쉽고 미래의 증거라고 생각했습니다. – fml

답변

2

확장형 명령어를 권장 할 수 없습니다. 이를 수행하는 좋은 방법이 아니며 각 지시어가 템플리트, 중계 및 범위를 처리하는 방식이 다르고 메쉬 가능성이 적습니다.

지시문을 래핑하려면 transclusion을 사용하고 지시문을 정상적으로 사용하는 것이 좋습니다.

<special-if> 
    <div>Stuff I may or may not want showing up</div> 
</special-if> 
+0

나는이 길로 내려가는 것을 끝내었다. Typescript로 변환하는 것이 훨씬 쉬웠습니다. 고맙습니다 – fml

관련 문제