ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 02 템플릿 구문 06
    앵귤러/03 템플릿&데이터 바인딩 2017. 8. 19. 11:03

    어트리뷰트, 클래스 및 스타일 바인딩

    템플릿 구문은 프로퍼티 바인딩에 적합하지 않은 시나리오에 대해 특수 단방향 바인딩을 제공합니다.

     

    어트리뷰트 바인딩

    어트리뷰트 바인딩을 사용하여 직접 어트리뷰트 값을 설정할 수 있습니다.

    이 가이드에서는 프로퍼티 바인딩을 사용하여 엘리먼트 프로퍼티를 설정하는 것이 항상 문자열로 어트리뷰트를 설정하는 것보다 더 바람직하다고 강조합니다. 그럼 Angular가 어트리뷰트 바인딩을 제공하는 이유는 무엇입니까?

    바인드 할 엘리먼트 프로퍼티가 없을 때 어트리뷰트 바인딩을 사용해야합니다.

    ARIA, SVG 및 테이블 스팬 어트리뷰트를 고려해볼 때, 이것들은 순수한 어트리뷰트입니다. 엘리먼트 프로퍼티에 해당하지 않으며 엘리먼트 프로퍼티를 설정하지 않습니다. 바인딩 할 프로퍼티 대상이 없습니다.

    이 사실은 여러분이 아래와 비슷한 것을 쓸 때 고통스럽게 명백해집니다.

    <tr><td colspan="{{1 + 1}}">Three-Four</td></tr>

    그러면 다음과 같은 오류가 발생합니다.

    Template parse errors:

    Can't bind to 'colspan' since it isn't a known native property

    메시지에서 말한 것처럼 <td> 엘리먼트에는 colspan 프로퍼티가 없습니다. "colspan"어트리뷰트가 있지만 보간 및 프로퍼티 바인딩은 어트리뷰트가 아닌 프로퍼티만 설정할 수 있습니다.

    이러한 어트리뷰트를 작성하고 바인드하려면 어트리뷰트 바인딩이 필요합니다.

    어트리뷰트 바인딩 구문은 프로퍼티 바인딩과 비슷합니다. 괄호 사이의 엘리먼트 프로퍼티 대신 접두어 attr과 점 (.) 및 어트리뷰트 이름으로 시작하십시오. 그런 다음 문자열로 해석되는 표현식을 사용하여 어트리뷰트 값을 설정합니다.

    [attr.colspan]을 계산 된 값에 바인딩 :

    src/app/app.component.html

    <table border=1>

      <!--  expression calculates colspan=2 -->

      <tr><td [attr.colspan]="1 + 1">One-Two</td></tr>

     

      <!-- ERROR: There is no `colspan` property to set!

        <tr><td colspan="{{1 + 1}}">Three-Four</td></tr>

      -->

     

      <tr><td>Five</td><td>Six</td></tr>

    </table>

    다음은 표가 표시된 방식입니다.


    어트리뷰트 바인딩의 주요 사용 사례 중 하나는 다음 예제와 같이 ARIA 어트리뷰트를 설정하는 것입니다.

    src/app/app.component.html

    <!-- create and set an aria attribute for assistive technology -->

    <button [attr.aria-label]="actionName">{{actionName}} with Aria</button>

     

    클래스 바인딩

    클래스 바인딩을 사용하여 엘리먼트의 클래스 속성에서 CSS 클래스 이름을 추가하거나 제거 할 수 있습니다.

    클래스 바인딩 구문은 프로퍼티 바인딩과 비슷합니다. 대괄호 사이에 엘리먼트 프로퍼티 대신 접두어 클래스로 시작하고 선택적으로 점 (.) CSS 클래스 이름 [class.class-name]을 붙이십시오.

    다음 예제는 클래스 바인딩을 사용하여 응용프로그램의 "특수"클래스를 추가하고 제거하는 방법을 보여줍니다. 바인딩없이 어트리뷰트를 설정하는 방법은 다음과 같습니다.

    src/app/app.component.html

    <!-- standard class attribute setting  -->

    <div class="bad curly special">Bad curly special</div>

    이를 원하는 클래스 이름의 문자열에 바인딩으로 바꿀 수 있습니다. 이것은 전부 또는 일부 대체 바인딩입니다.

    src/app/app.component.html

    <!-- reset/override all class names with a binding  -->

    <div class="bad curly special"

         [class]="badCurly">Bad curly</div>

    마지막으로 특정 클래스 이름에 바인딩 할 수 있습니다. Angular는 템플릿 표현식이 true로 평가 될 때 클래스를 추가합니다. 표현이 거짓 일 때 클래스를 제거합니다.

    src/app/app.component.html

    <!-- toggle the "special" class on/off with a property -->

    <div [class.special]="isSpecial">The class binding is special</div>

     

    <!-- binding to `class.special` trumps the class attribute -->

    <div class="special"

         [class.special]="!isSpecial">This one is not so special</div>

     

    스타일 바인딩

    스타일 바인딩으로 인라인 스타일을 설정할 수 있습니다.

    스타일 바인딩 구문은 프로퍼티 바인딩과 비슷합니다. 대괄호 사이에 엘리먼트 프로퍼티 대신 접두사 style로 시작하고 그 뒤에 점 (.) CSS 스타일 프로퍼티 이름이[style.style-property] 옵니다.

    src/app/app.component.html

    <button [style.color]="isSpecial ? 'red': 'green'">Red</button>

    <button [style.background-color]="canSave ? 'cyan': 'grey'" >Save</button>

    일부 스타일 바인딩의 스타일에는 단위 확장자가 있습니다. 다음 예제는 "em" "%"단위로 글꼴 크기를 조건부로 설정합니다.

    src/app/app.component.html

    <button [style.font-size.em]="isSpecial ? 3 : 1" >Big</button>

    <button [style.font-size.%]="!isSpecial ? 150 : 50" >Small</button>

     

    '앵귤러 > 03 템플릿&데이터 바인딩' 카테고리의 다른 글

    02 템플릿 구문 08  (0) 2017.08.19
    02 템플릿 구문 07  (0) 2017.08.19
    02 템플릿 구문 05  (0) 2017.08.19
    02 템플릿 구문 04  (0) 2017.08.19
    02 템플릿 구문 03  (0) 2017.08.19

    댓글

Designed by Tistory.