2013-05-24 2 views
5

'미리보기'모드에서 지시어 세트를 일시적으로 제거/대체/덮어 쓰는 방법이 있는지 알아 내려고하고 있습니다.모듈에서 지시문을 제거하십시오.

우리는

angular.module('myModule', []); 

지시어가에 포함되는 모듈 (들), 예컨대을 : 제거 시도했지만 지시어가 여전히 활성화되어 있습니다.

아무도 도와 줄 수 있습니까?

답변

1

다른 방법으로 각 지시문에 미리보기 모드를 적용하는 것이 좋습니다. 현재 상태가 미리보기인지 '라이브'인지를 나타내는 속성을 전달하고 ng-switch를 사용하여 지시문 템플릿의 조건을 지정합니다.

맛은 다양하지만, 즉각적인 지시문을 다시 정의하는 것보다 읽기 쉬운 방법이라고 생각합니다.

+0

불행히도 우리는 많은 지시문을 가지고 있으며 모든 스위치 논리를 반복 할 것입니다. 모든 것을 한 곳에서 처리하는 것이 더 깨끗해 졌을 것입니다. –

+0

흠. 알았어. 대체 (미리보기 모드) 버전이 고정적입니까? 지시어 템플릿의 위치로 게임을하면이 작업을 수행 할 수 있습니까? (예 : directive 정의에서 templateUrl을 사용하여 동적 경로 만들기) –

+0

해당 솔루션의 작동 방식을 확인할 수 있지만 지시문을 멀리두고 다시 가져 오는 것보다 훨씬 많은 노력이 필요합니다. –

5

내부적으로 AngularJS와 지시어 이름에 접미사를 추가하여, 공장에서 지시을 만듭니다. 따라서 공장을 noop 공장으로 대체하여 지시문을 비활성화 할 수 있습니다.

var noopDirective = function() { return function() {}; }; 
if (previewMode) { 
    // Disable ngPaste directive 
    angular.module('myModule') 
     .factory('ngPasteDirective', noopDirective); 
} 

이것이 마지막으로 실행 된 코드인지 확인하십시오.

+0

그러나 이것은'myModule' 모듈의 지시문이 아니라'ngPaste' 지시문을 전체적으로 비활성화합니다. 예를 들어,'mod2' 모듈에'ngPaste' 지시자를 정의했다고 가정합니다. 그런 다음, 위의 코드는'myModule'의'ngPaste' 지시자뿐만 아니라'mod2'의'ngPaste' 지시어도 비활성화 할 것입니다. 어떻게 한 모듈에서'ngPaste' 지시자 만 사용하지 못하게 할 수 있습니까? (그리고 나머지 기능들은 그대로 유지할 수 있습니다. BTW, 비활성화하려는 지시문은 수정 된 버전을 유지하고 싶지 않은 대형 타사 라이브러리에 있습니다. – Rockallite

관련 문제