2013-01-24 9 views
4

John Lindquist 자습서에서는 transclusion을 사용하여 지시문에서 일부 내용을 가져 와서 원하는 위치에 넣습니다.angularjs에서 transclusion을 어떻게 사용합니까?

하지만 문서는 translude 함수에 대해 이야기하고이를 컨트롤러 및 컴파일 함수에 전달합니다. 그렇다면 transclusion은 무엇이며 어떻게 사용해야합니까?

+4

아직 답을 수락하지 않은 것으로 나타났습니다. 이 질문에 대한 도움이 더 필요하십니까? –

답변

2

egghead.io에 대한 Johns "Zippy Building"자습서는 내가 본적이있는 최고의 설명입니다. 두 문장 모두 옳았습니다. John은 예제를 제공하지만, 뒤에서 일어나는 일은 마크 업의 html이 템플릿과 컴파일러를 통해 놓이는 것입니다. 그의 튜토리얼에서, John은 실수로 템플릿의 내용을 남겨두고 angle의 컴파일러가 마크 업 html과 템플릿 html을 어떻게 연결하는지 볼 수 있습니다. 기본 지침을 만들 때

16

는, 트랜스 클루 전은 간단합니다 : 템플릿이 ngTransclude 지시자를 포함

module.directive('myTransDir', function() { 
    return { 
    transclude: true, 
    scope: true, 
    replace: true, 
    template: '<div><h1>Hello!</h1><div ng-transclude></div></div>', 
    }; 
}); 

때문에, 자동으로 나를 위해 내용을 transclude 것입니다. 나는이처럼 사용하는 경우 :

<div my-trans-dir> 
    <p>Some Content</p> 
</div> 

생성 된 HTML은 다음과 같습니다

<div> 
    <h1>Hello!</h1> 
    <div> 
    <p>Some Content</p> 
    </div> 
</div> 
+0

느린'대체 '는 무엇입니까? 오류가 발생하지 않습니까? – Lukas

+0

@ 루카스 아니, 왜?"느린"것이 무엇을 의미하는지 모르겠습니다. 포함 된 템플릿은 자체 포함되었으므로 지시문이 적용된 dom 요소를 템플릿 대신 * 포함하는 대신 해당 요소를 포함하는 것으로 변경했습니다. –

+1

귀하의 대답은 올바른 방법이지만이 방법으로는 컴파일되지 않습니다. 속성을'replace '할 값을 할당하거나 완전히 제거해야합니다. –

6

@Josh 이미 ngTransclude 덮여. 이것은 중계를위한 "일반적인 사용 사례"입니다.

는 또한 문서에 이러한 진술에 대해 질문했다 :

컨트롤러 - 컨트롤러 생성자 함수 ... 컨트롤러는 다음과 같은 주민들과 주입니다
:
...
$의 transclude을 - 올바른 transclusion 범위에 미리 바인딩 된 transclude 링킹 함수 : function (cloneLinkingFn).

템플릿 DOM을 변화와 컴파일 기능 거래 ...
컴파일 함수는 다음 인수를 사용합니다.
...
transclude - 연결 기능을 transclude : function (scope, cloneLinkingFn).

나는 이러한 밀교 사용 사례를 고려합니다. 나는 개인적에서만 유래에 이들 중 하나 언급을 보았다, 나는 당신을 거기에서 참조 할 수 있습니다 :
What exactly do you do with the transclude function and the clone linking function?

견적을 @blesh에서 "트랜스 클루 전이 두 가지 방법이 모든 것을 제어 할 수있는 기능이 제공 할 수 있습니다 프로세스에 대한 프로그래밍 방식의 액세스를 통해 귀하를 소개합니다. "

업데이트 : 내 소개에 대해 좋은 blog post을 찾았습니다.

+0

+1 이것은 좋은 추가 정보입니다, 마크. 나는 한번'$ transclude '를 한 번 사용해 보았지만 물었다. :-) –

+0

@Josh, 가능하다면 하나의 유스 케이스를 공유하십시오. –

+0

예를 들어 템플리트가없는 지시문에 코드를 붙이거나 부모가 아닌 다른 범위를 사용하여 코드를 추가하는 데 사용할 수 있습니다. 이전에 angular-ui/bootstrap의 툴팁 플러그인 인 [here] (https://github.com/angular-ui/bootstrap/blob/master/src/tooltip/tooltip.js#L22)에 사용했지만 더 간단한 것을 위해 그것을 제거하는 공개 된 [PR] (https://github.com/angular-ui/bootstrap/pull/92). –

관련 문제