1

!!!!!!!!!! 이전 질문

code (구식 인)을보십시오. 템플릿이있는 격리 된 지시문은 작동하지만보기에서 액세스하는 지시문은 작동하지 않습니다. 반투명 격리 지시문 컨트롤러 모델이보기에서 액세스 할 수 없음


는 새로운 하나

나는 같은 plunk 사용하고 난 내 지시어에, 그러나 그것은 여전히 ​​작동하지 않는 transclution를 사용하는 앤드류 아이젠 버그의 제안을 듣고있다.

HTML

<p isolate-with-template></p> 
<p isolate-with-transclude>Hello World {{vm.hi}}</p> 

JS

angular.module('app',[]) 
.directive('isolateWithTemplate',function() { 
    return { 
    restrict: 'A', 
    controllerAs: 'vm', 
    scope:{}, 
    controller: function ($scope) { 
     var vm = this; 
     vm.hi = "hi"; 
    }, 
    template: "{{vm.hi}}" 
    } 
}) 
.directive('isolateWithTransclude',function() { 
    return { 
    restrict: 'A', 
    controllerAs: 'vm', 
    scope: {}, 
    transclude: true, 
    template: "<div ng-transclude></div>", 
    controller: function ($scope) { 
     var vm = this; 
     vm.hi = "hi"; 
    } 
    } 
}) 
+0

고립 된 스코프 지시자는 템플릿이 – charlietfl

답변

0

문제는 당신이 지침의 내부에 컨텐츠를 추가 할 때의 매개자되지 않는다는 점이다 isolateWithoutTemplate

+0

인'scope : true'를 기대하며 스코프는 더 이상 분리되지 않습니다. 그것은 프로토 타입 적으로 부모 범위를 상속합니다. –

2

scope: true,scope: {}, 교체 , 그 내용 지시문에 의해 덮어 씁니다.

템플릿이없는 지침의 경우 모든 내용이 제거됩니다. {{vm.hi}}을 임의의 텍스트로 바꾸면이 내용을 볼 수 있으며 표시되지 않는다는 것을 알 수 있습니다.

보기에 vm을 포함하려면 transclude 속성을 지시문 정의에 추가하여 코드를 제거해야합니다. 템플릿을 추가해야하지만 비어있을 수도 있습니다. how to use transclude is available in the angular docs에 대한 자세한 정보.

+0

올바른 내용입니다. 이를 추가하기 위해, 지시어 태그 안에 배치 된 자식 요소는 * 지시어의 일부가 아니다. – Claies

+0

사실이 아닙니다. 안녕하세요 세계 텍스트를 표시하는 예제를 업데이 트하고 올바르게 표시 –

+0

흠 .... 당신 말이 맞아. 나는 나의 첫 번째 (삭제 된) 대답으로 되돌아 가서'vm'이 자식 요소의 범위에 있지 않음과 관련이 있다고 말한다. –