# 개요

circle 형태의 background-url을 가지고 있는 div Component를 반복적으로 사용한다고 하자. 사실 변하는 값은 한 두가지(value url 또는 color, size) 등이고, 나머지 틀은 다 똑같다. 그런데, 사용되는 곳마다, 클래스를 다같이 선언해주어야 하고, 불편하고, 수정이 어려워진다는 단점이 존재한다. 

그래서, angular는 재사용가능한 component를 지정하여, 변하는 속성만 Input으로 받고, 나머지는 감추어서 표현이 가능하다.


# 참고

- ngClass 속성은 동적 Class명 리스트를 지정할 수 있다. 

(ex) ['기본속성','사용자정의 속성']

- ngStyle 속성은 동적 style을 지정할 수 있다.

- onChanges LifeCycle 함수는 아래와 같은 경우에 호출된다.

1. 자식 컴포넌트가 부모로 부터 전달받은 데이터가 초기화 되는 시점

2. 그 후에 변경될 때마다 호출

3. 즉, Input 데코레이터로 전달 받은 데이터가 변경되지 않으면 호출되지 않는다.

- @Input() 데코레이터의 값은 기본값을 지정할 수 있다.


<ts>

import { ComponentOnInitInputOnChangesSimpleChanges } from '@angular/core';

@Component({
  selector: 'j-avatar',
  templateUrl: './avatar.component.html',
  styleUrls: ['./avatar.component.scss']
})
export class AvatarComponent implements OnChanges {
  @Input() avatarUrlstring;
  @Input() namestring;
  @Input() size 12;
  @Input() rounded true;
  @Input() className '';

  style: {};

  constructor() {}
  
  // onChange 호출 시, css 스타일 지정
  ngOnChanges(changesSimpleChanges): void {
    this.updateStyle();
  }

  ngOnInit(): void {}

  private updateStyle() {
    this.style = {
      width: `${this.size}px`,
      height: `${this.size}px`,
      'background-image': `url('${this.avatarUrl}')`,
      'border-radius': this.rounded ? '100%' : '3px'
    };
  }
}


<html>

<div *ngIf="avatarUrl"
     [ngClass]="['avatar-container'className]"
     [ngStyle]="style">
</div>


<scss>

.avatar-container {
  background-position50% 50%;
  background-repeatno-repeat;
  background-sizecover;  
  border-radius50%//border 추가
  border-width1px;  //border 추가
}


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기