AngularJS 지시문 제한 A 대 E


113

저는 소규모 팀에서 일하고 있으며 AngularJS로 구축하고 몇 가지 기본 표준 및 모범 사례를 유지하려고 노력하고 있습니다. 특히 Angular가 상대적으로 새롭다는 점을 감안할 때.

제 질문은 지침에 관한 것입니다. 더 정확하게는 restrict옵션입니다.

우리 중 일부는 사용하는 restrict: 'E'데 따라서 <my-directive></my-directive>html로에서.

다른 사람들은 html을 사용 restrict: 'A'하고 <div my-directive></div>있습니다.

그런 다음 물론 restrict: 'EA'위 중 하나를 사용 하고 사용할 수 있습니다 .

현재로서는 큰 문제가 아니지만,이 프로젝트가 큰 규모 일 때는 누구나 쉽게 이해할 수 있기를 바랍니다.

작업을 수행하는 속성 또는 요소 방식에 장단점이 있습니까?

속성보다 say 요소를 선택할 때 알아야 할 함정이 있습니까?

답변:


100

문서 에 따르면 :

속성과 요소는 언제 사용해야합니까? 템플릿을 제어하는 ​​구성 요소를 만들 때 요소를 사용합니다. 이에 대한 일반적인 경우는 템플릿의 일부에 대해 도메인 별 언어를 만드는 경우입니다. 새 기능으로 기존 요소를 장식 할 때 속성을 사용하십시오.

완전한 답을 얻으려면 함정에 대한 다음 주석을 편집하십시오.

AngularJS 1.3에서 AngularJS 팀이 지원을 중단 한 Internet Explorer <= 8에서 실행해야하는 앱을 빌드한다고 가정하면 다음 지침을 따라야 작동합니다. https : //docs.angularjs .org / guide / ie


3
나는 그 문서를 위아래로 읽었지만 이것을 놓쳤습니다 :) 감사합니다.
Darren Wainwright

3
이 설명은 함정과 장단점을 다루지 않습니다.
Konstantin Krass 2014

함정에 대한 내 대답을 그에 따라 업데이트했습니다. 특히 Angular 팀이 권장하고 설명 할 때 여기에서 모범 사례에 대해 더 많이 이야기하고 있다고 생각하기 때문에 장단점을 언급하지 않았습니다.
ngasull 2014

1
"장점 / 단점은 언급하지 않았습니다. 특히 Angular 팀에서 권장하고 설명 할 때 여기에서 모범 사례에 대해 더 많이 이야기하고 있다고 생각하기 때문입니다." 응? :)
Alexander Mills

169

제한은 지시문 유형을 정의하기위한 것이며 A(Attribute), C(Class), E(Element) 및 M(coMment) 일 수 있습니다. 지시문의 이름이 다음 과 같다고 가정하겠습니다 Doc.

유형 : 사용법

A = <div Doc></div>

C = <div class="Doc"></div>

E = <Doc data="book_data"></Doc>

M = <!--directive:Doc -->


2
적은 @nikunj로 답변을보다 명확 그러나 그들의 대답을보고 난 후에 나는 당신을 이해 ...
알렉산더 밀스

47

제한 옵션은 일반적으로 다음과 같이 설정됩니다.

  • 'A'-속성 이름 만 일치
  • 'E'-요소 이름 만 일치
  • 'C'-클래스 이름 만 일치
  • 'M'-주석 만 일치

다음은 문서 링크 입니다.


간단하고 깨끗한
Gaurav_0093

7

IE8에서는 기본적으로 요소가 지원되지 않으므로 IE8에서 사용자 지정 태그를 허용하도록 몇 가지 작업을 수행해야합니다.

요소에 대한 속성 사용의 한 가지 장점은 동일한 DOM 노드에 여러 지시문을 적용 할 수 있다는 것입니다. 이것은 요소를 여러 태그로 감싸지 않고도 추가 속성을 사용하여 강조 표시, 비활성화 또는 레이블 등을 추가 할 수있는 양식 컨트롤과 같은 작업에 특히 유용합니다.


5

내가 아는 함정 중 하나는 사용자 지정 요소의 IE 문제입니다. 문서 에서 인용 한대로 :

3) 다음 과 같은 사용자 지정 요소 태그를 사용 하지 않습니다 (대신 속성 버전 사용).

4) 사용자 정의 요소 태그를 사용하는 경우 다음 단계를 수행하여 IE 8 이하를 만족스럽게 만들어야합니다.

<!doctype html>
  <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName">
    <head>
      <!--[if lte IE 8]>
        <script>
          document.createElement('ng-include');
          document.createElement('ng-pluralize');
          document.createElement('ng-view');

          // Optionally these for CSS
          document.createElement('ng:include');
          document.createElement('ng:pluralize');
          document.createElement('ng:view');
        </script>
      <![endif]-->
    </head>
    <body>
      ...
    </body>
  </html>

4

함정:

  1. <my-directive></my-directive>해결 방법없이 IE8에서 작동하지 않는 것과 같은 자신의 html 요소를 사용하면 ( https://docs.angularjs.org/guide/ie )
  2. 자신의 html 요소를 사용하면 html 유효성 검사가 실패합니다.
  3. 동일한 매개 변수가있는 지시문은 다음과 같이 수행 할 수 있습니다.

<div data-my-directive="ValueOfTheFirstParameter"></div>

대신 :

<my-directive my-param="ValueOfTheFirstParameter"></my-directive>

우리는 그나마 때문에 만약이이 사실을 사용하는 사용자 정의 HTML 요소를.

타사 프레임 워크의 모든 지침은 두 가지 방법으로 작성할 수 있습니다.

<my-directive></my-directive>

또는

<div data-my-directive></div>

동일합니다.


1
동일한 범위 매개 변수가 1 개인 지시문을 작성하려는 경우 A로 작성하는 것이 더 쉽습니다. 추가 속성을 작성할 필요가 없기 때문입니다.
Konstantin Krass 2014

추가 란 무엇을 의미합니까? 두 대안 모두 정확히 하나의 속성을 갖습니다.
더 나은 올리버

3

요소의 2 가지 문제 :

  1. 오래된 브라우저에서 잘못된 지원.
  2. SEO-Google의 엔진은 그들을 좋아하지 않습니다.

속성을 사용하십시오.


요소로서의 지시문이 SEO 문제를 일으킬 수 있습니까? 놀랐어요. 그리고 replace속성은 true어떻습니까?
chalasr

1
이러한 주장에는 참조가 필요합니다. 포인트 하나는 상당히 다른 곳에서 잘 확립,하지만 난 포인트 2에 대한 소스를보고 싶어요
rinogo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.