사용자 정의 AngularJS 지시문에 '대체'기능을 사용하는 방법은 무엇입니까?


91

이유는 무엇입니까 replace=true또는 replace=false아래의 코드에 영향을주지?

replace = false 일 때 "일부 기존 컨텐츠"가 표시되지 않는 이유는 무엇입니까?

아니면 좀 더 겸손하게 말하면 replace=true/false지시문 의 기능과 사용 방법을 친절하게 설명해 주 시겠습니까?

JS / Angular :

<script>
    angular.module('scopes', [])
          .controller('Ctrl', function($scope) {
                $scope.title = "hello";

          })
          .directive('myDir', function() {
            return {
              restrict: 'E',
              replace: true,
              template: '<div>{{title}}</div>'
            };
      });
</script>

HTML :

<div ng-controller="Ctrl">
    <my-dir><h3>some existing content</h3></my-dir>
</div>

여기 Plunker에서 확인하십시오.

http://plnkr.co/edit/4ywZGwfsKHLAoGL38vvW?p=preview


2
@georgeawg는 이것을이 질문보다 나중에 질문 / 답변 한 다른 질문의 중복으로 표시했습니다.
Kaya Toast

답변:


189

replace: true다음과 같은 DOM을 얻었을 때 :

<div ng-controller="Ctrl" class="ng-scope">
    <div class="ng-binding">hello</div>
</div>

반면에 다음과 replace: false같이 얻을 수 있습니다.

<div ng-controller="Ctrl" class="ng-scope">
    <my-dir>
        <div class="ng-binding">hello</div>
    </my-dir>
</div>

따라서 replace지시문 의 속성은 지시문이 적용되는 요소 ( <my-dir>이 경우)가 유지되어야하는지 ( replace: false) 지시문의 템플릿을 자식 으로 추가 해야하는지 여부를 나타냅니다 .

또는

지시문이 적용되는 요소를 교체 해야합니다 (replace: true 는 지시문의 템플릿 ).

두 경우 모두 요소 (지시문이 적용되는)의 자식이 손실됩니다. 요소의 원본 콘텐츠 / 자식을 유지하려면 변환해야합니다. 다음 지시문이이를 수행합니다.

.directive('myDir', function() {
    return {
        restrict: 'E',
        replace: false,
        transclude: true,
        template: '<div>{{title}}<div ng-transclude></div></div>'
    };
});

이 경우 지시문의 템플릿에 속성이있는 요소 (또는 요소)가있는 ng-transclude경우 해당 내용 은 해당 요소 (지시문이 적용되는)의 원래 내용으로 대체됩니다.

translusion의 예를 참조하십시오 http://plnkr.co/edit/2DJQydBjgwj9vExLn3Ik?p=preview

translusion에 대해 자세히 알아 보려면 이것을 참조하십시오 .


6
이것은 놀랍도록 간단한 설명입니다. 그리고 초월을 명확히 해주셔서 감사합니다.
Kaya Toast

더 중요한 것은 왜 docs.angularjs.org/guide/directive에 설명되어 있지 않고이 답변이 주제에 대한 명확한 답변과 연결되지 않는 이유는 무엇입니까?
Trindaz

3
@Trindaz replace는 AngularJS v1.3 ( 링크 ) 부터 사용되지 않습니다 .
Tonči D. 2015

33

replace:true 더 이상 사용되지 않음

문서에서 :

replace ([DEPRECATED!], 다음 주요 릴리스 (예 : v2.0)에서 제거됩니다.)

템플릿으로 대체해야하는 항목을 지정합니다. 기본값은 false.

  • true -템플릿이 지시문의 요소를 대체합니다.
  • false -템플릿이 지시문 요소의 내용을 대체합니다.

- AngularJS와 포괄적 인 지침의 API

GitHub에서 :

Caitp--에 대해 알려진 매우 어리석은 문제가 있기 때문에 더 이상 사용되지 않습니다.이 중 replace: true상당수는 합리적인 방식으로 해결할 수 없습니다. 주의해서 이러한 문제를 피하면 더 많은 권한을 얻을 수 있지만 신규 사용자의 이익을 위해 "이렇게하면 골치 아픈 일 이니,하지 마세요"라고 말하는 것이 더 쉽습니다.

- AngularJS와는 실행 # 7636


최신 정보

참고 : replace: true주로 여기에 나열된 문제로 인해 더 이상 사용되지 않으며 사용하지 않는 것이 좋습니다. 새로운 Angular에서 완전히 제거되었습니다.

교체 문제 : true

자세한 내용은


2
나는 이것이 Angular 2에서 비공식적으로 지원되어야한다고 계속 읽고 있지만 활성화하는 방법을 알 수 없습니다. 누군가 구문이 무엇인지 말해 줄 수 있습니까?
devios1 2016 년

@devios 내 mdl 구성 요소에 대해 그런 것이 필요하지만 현재 remove-host해결 방법을 사용 하고 있습니다. stackoverflow.com/questions/34280475/…replace: true A2에서 활성화 하는 방법 에 대해 알고 있으면 알려주십시오.
kuncevic.dev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.