2013-10-15 2 views
0

서비스를 통해 dom에 주입하는 XML에 대해 작동하는 지시문을 만들려고합니다. 여기 각도 지시어가 대체되지 않음

내 상대적으로 감소 된 예입니다 또한 비동기 서비스 데이터에 대한 전화 및 템플릿을 제거하는 데 : jsBin - transforming elements using directive

모두가 H2 태그에 내 게시물 요소 '헤더 속성을 받고 관련하여 잘 작동하지만 떠나는를 일부 브라우저에서는 실패 할 수있는 내 페이지 내의 요소. 명확하게

이 내가 무엇을 얻을 수 있습니다 :

<post class="ng-isolate-scope ng-scope" heading="test heading"> 
     <div class="ng-scope"> 
     <h2 class="ng-binding">test heading</h2> 
     <div>test</div> 
     </div> 
    </post> 

를이 내가 기대하는 것입니다 : 당신은 당신의 지시에 제대로 템플릿을 사용하지 않는

<div class="ng-scope"> 
     <h2 class="ng-binding">test heading</h2> 
     <div>test</div> 
    </div> 
+0

당신 직결되는 요소 : 당신이 당신의 링크 기능에서이 작업을 수행 할 수 있습니다 jQuery를 포함하면 – KayakDave

+0

내 게시물을 편집하여 희망 사항을 조금 더 명확하게했습니다. –

답변

2

나는 다른 방법으로 쉽게 아담의 대답은 더 나은 경로 생각하지만? 아니면 예를 들어`ng-binding` 속성에 대해 걱정하고 있습니까?
+0

이것은 정확히 내가 무엇을 찾고 있었는지를 아는 사람이 jQuery 종속성없이 어떻게하는지 알고 있습니까? –

+0

당신은 replaceWith를 다시 작성해야 할 것입니다. http://stackoverflow.com/questions/10165262/best-way-to-write-jquerys-replacewith-in-natural-javascript – lucuma

+0

아마도 element.parent(). replaceChild (e, element)'또는 이와 비슷한 것일 수 있습니까? –

2

. 링크 기능은 예제 코드에서와 같이 템플릿을 적용해서는 안됩니다. 게시물 지시어에서

return { 
     restrict: 'E', 
     replace: true, 
     scope: { 
      heading: '@' 
     }, 
     template: '<div><h2>{{heading}}</h2><div>test</div></div>' 
    }; 

대신 그

var linker = function(scope, element, attrs) { 

     var template = getTemplate(); 

     element.html(template); 

     $compile(element.contents())(scope); 
    }; 

, 그냥 이렇게. 'replace : true'는 DOM을 직접 컴파일하고 조작하는 경우 아무런 영향을주지 않습니다.

동시에, 컴파일 지시문이 무엇인지, 그리고 HTML 문자열을 반환하는 팩토리가있는 이유는 모르겠다. 모든 코드는 단일 지시문으로 축소 될 수있는 것처럼 보입니다. 내가하는 일에 대해 정말로 언급 할 수는 없지만 일단 모든 곳에서 $ 컴파일을 시작하면 '각도 방식'으로 일하지 않을 가능성이 있습니다.

var e =$compile(template)(scope); 
element.replaceWith(e); 
+0

잘 구조화 된 답변을 주셔서 감사합니다. Adam, yeh 예를 들어서 죄송합니다. 다소 축소되었습니다. 내 서비스는 실제로 데이터에 대한 비동기 호출을 만들고 링커 함수 내에서 동적으로 템플릿을로드하므로 getTemplate 호출이 성공하면 $ 컴파일 조각이 발생합니다 (서비스 호출로 인해 컴파일 조각이 필요함) 템플릿과 dom 주사 모두) –

+0

그런 경우에도 내 대답을 사용해야합니다. 코드에서 비동기 호출을 작성하는 모든 구성 요소는 약속을 반환해야하며 이는 템플릿에 직접 바인딩 될 수 있습니다. Angular로보기에서 자동으로 해결됩니다. 링크 함수에서 $ compile 서비스를 사용하는 것은 필요하지 않습니다. – Adam

관련 문제