Angular의 DI는 구성 요소를 더 스마트하게 만들 수 있습니다.
12182 단어 angularjavascriptcomponentwebdev
Angular에 내장된 종속성 주입은 매우 강력하며 오늘 우리는 이를 사용하여 구성 요소를 스마트하게 만드는 방법을 살펴보겠습니다.
버튼 구성요소에 대해 알아보겠습니다.
<app-button
accent=" primary | danger | success | ... "
size =" small | medium | large | cta | ... "
icon = "[ ... ]"
iconSize = "sm | md | lg | ..."
label = "[ ... ]"
translate = " true | false "
ripple = " true | false "
tooltip = "true | false"
...
>
</app-button>
여기에서 버튼 구성 요소가 다양한 구성 옵션을 제공하여 다양한 사용 사례를 처리하는 데 사용할 수 있음을 알 수 있습니다.
이러한 모든 입력을 항상 제공하는 것은 번거로울 수 있으며 불일치로 이어질 수도 있습니다.
이 문제를 해결하기 위해 먼저 애플리케이션에서 버튼을 배치할 수 있는 모든 위치를 찾아야 합니다.
예를 들어
장소
버튼 크기
아이콘 크기
도구 설명 표시
아이콘만
...
앱 헤더
크기가 큰
엘지
거짓
거짓
카드 헤더
중간
메릴랜드
거짓
거짓
테이블 행
SM
SM
진실
진실
버튼이 어떻게 그리고 어디에 사용될 것인지에 대한 명확한 아이디어가 있으면 컨텍스트에서 값을 추론할 수 있는 모든 입력에 대해 Angular의 주입 토큰을 만들 수 있습니다.
const BUTTON_SIZE_HINT_TOKEN = new InjectionToken<
small | medium | large | cta | ...
>('Button size hint token', {
providedIn: 'root',
factory: () => 'medium' // default value
});
const BUTTON_ICON_HINT_TOKEN = new InjectionToken<
lg | md | sm | hide | ...
>('Button size hint token', {
providedIn: 'root',
factory: () => 'md' // default value
});
const BUTTON_TOOLTIP_HINT_TOKEN = new InjectionToken<
boolean
>('Button size hint token', {
providedIn: 'root',
factory: () => false // default value
});
...
이러한 토큰을 만든 후에는 버튼 구성 요소에서 사용해야 합니다.
// button.component.ts
// ...
// ... code ommited for brevity
constructor(
@Inject(BUTTON_SIZE_HINT_TOKEN)
private buttonSize: small | medium | large | cta | ... ,
@Inject(BUTTON_ICON_HINT_TOKEN)
private iconSize: lg | md | sm | hide | ...,
@Inject(BUTTON_TOOLTIP_HINT_TOKEN)
private showToolTip: boolean,
// ... other dependecies
){}
여기에서 이러한 힌트를 사용하여 버튼 구성 요소의 기본값을 설정할 수 있습니다.
다음 단계는 버튼이 사용될 위치에 이러한 힌트를 제공하는 것입니다.
@Component({
selector: 'app-page-header',
templateUrl: './template-file.html',
providers: [
{
provide: BUTTON_SIZE_HINT_TOKEN,
useValue: 'large'
},
{
provide: BUTTON_ICON_HINT_TOKEN,
useValue: 'lg'
},
{
provide: BUTTON_TOOLTIP_HINT_TOKEN,
useValue: false
},
]
})
export class AppPageHeaderComponent {
@Component({
selector: 'app-table',
templateUrl: './template-file.html',
providers: [
{
provide: BUTTON_SIZE_HINT_TOKEN,
useValue: 'sm'
},
{
provide: BUTTON_ICON_HINT_TOKEN,
useValue: 'sm'
},
{
provide: BUTTON_TOOLTIP_HINT_TOKEN,
useValue: true
},
]
})
export class TableComponent {
@Component({
selector: 'app-card-header',
templateUrl: './template-file.html',
providers: [
{
provide: BUTTON_SIZE_HINT_TOKEN,
useValue: 'medium'
},
{
provide: BUTTON_ICON_HINT_TOKEN,
useValue: 'md'
},
{
provide: BUTTON_TOOLTIP_HINT_TOKEN,
useValue: false
},
]
})
export class AppCardHeaderComponent {
이렇게 하면 버튼 구성 요소가 컨텍스트 자체에서 가져오기 때문에 앱 버튼을 사용하는 동안 buttonSize, buttonIconSize 및 showToolTip 플래그를 지정할 필요가 없습니다.
이 접근법을 찾는 방법을 알려주십시오!
고맙습니다!
Reference
이 문제에 관하여(Angular의 DI는 구성 요소를 더 스마트하게 만들 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shivamd20/angulars-di-can-make-your-components-smarter-5h16텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)