Angular๋ ์ ํ๋ฆฌ์ผ์ด์
๋ด ๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ ๋ฐฉ์์์ ๋๋ผ์ด ๋ฐ์ ์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. Angular 16 ์ด์ ๋ฒ์ ์ผ๋ก ์์
ํด ๋ณธ ๊ฐ๋ฐ์๋ผ๋ฉด ๋จ์ํ id ํ๋๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ActivatedRoute์ paramMap์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ ๊ธฐ์ต์ด ์์ ๊ฒ์
๋๋ค.
ํ์ง๋ง ์ด์ Angular 20์ ์ต์ ๊ฐ๋ฐ ํจํด๊ณผ ์ ์ด์ธ๋ฆฌ๋ ๋ ๋์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฐ๋ก withComponentInputBinding()์
๋๋ค.
์ด ๊ธ์์๋ ์ด ๊ธฐ๋ฅ์ด ๋ฌด์์ธ์ง, ์ด๋ค ๋ฌธ์ ๋ฅผ ์๋ฌต์ ์ผ๋ก ์ด๋ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ฐ์ํ๊ฒ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค โ Angular 20 ๊ธฐ์ค์ผ๋ก ์ค๋ช ํฉ๋๋ค.
๐ก withComponentInputBinding()์ด๋?
withComponentInputBinding()์ ๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ปดํฌ๋ํธ์ @Input() ์์ฑ์ ์๋์ผ๋ก ๋ฐ์ธ๋ฉํ ์ ์๋๋ก ํ๋ ์ค์ ์ ํธ๋ฆฌํฐ์
๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ผ์ฐํธ ์ต์ ๋ฒ๋ธ์ ์๋์ผ๋ก ๊ตฌ๋ ํ ํ์ ์์ด ์ปดํฌ๋ํธ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, /user/:id๋ผ๋ ๊ฒฝ๋ก๊ฐ ์๊ณ ์ปดํฌ๋ํธ์ id๋ผ๋ @Input()์ด ์๋ค๋ฉด, Angular๋ ์๋์ผ๋ก ์ด๋ฅผ ๋งคํํด์ค๋๋ค โ ๋จ, ๋ผ์ฐํฐ ์ค์ ์์ ์ด ๊ธฐ๋ฅ์ ํ์ฑํํ์ ๊ฒฝ์ฐ์๋ง.
โ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ฒฝ๋ก๋ฅผ ์ ์ํฉ๋๋ค:
{ path: 'user/:id', component: UserComponent }
- ์ปดํฌ๋ํธ์์
@Input()์ ์ฌ์ฉํฉ๋๋ค:
@Input() id!: string;
- ๋ผ์ฐํฐ ์ค์ ์์ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค:
provideRouter(routes, withComponentInputBinding())
์ด์ ๋ ์ด์ ๊ตฌ๋ ์์ด๋ ๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ๊ฐ ์ปดํฌ๋ํธ์ ์๋ ์ ๋ฌ๋ฉ๋๋ค.
๐ ๋ฌธ์ ์ : ์ฝ๋์์์ ์๋ ๋ชจํธ์ฑ
์ด ๊ธฐ๋ฅ์ ๋ถ๋ช ์ ์ฉํ์ง๋ง, ์ฝ๋์ ์๋๋ฅผ ํ๋ฆด ์ ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
@Input()์ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๋๋ค๋ ์๋ฏธ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฐ๊ฒฐํ๋ฉด, ์ฝ๋์ ์๋ฏธ๊ฐ ์ ๋งคํด์ง ์ ์์ต๋๋ค.
๋ค๋ฅธ ๊ฐ๋ฐ์(ํน์ ๋ฏธ๋์ ์์ )๋ ์ด ๊ฐ์ด URL์์ ์๋ค๋ ์ฌ์ค์ ํ์ ํ์ง ๋ชปํ๊ณ , ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ ๋ฌ๋์๋ค๊ณ ์ฐฉ๊ฐํ ์ ์์ต๋๋ค.
๐งช ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋ช ํํ ์๋๋ฅผ ์ํ ๋ณ์นญ ์ฌ์ฉ
ํด๊ฒฐ์ฑ
์ ๊ฐ๋จํฉ๋๋ค. Angular์ ๋ด์ฅ input() ์๊ทธ๋์ ๋ณ์นญ์ ๋ถ์ฌ, ์๋ฅผ ๋ค์ด routeBinding()์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
import { input, input as routeBinding } from '@angular/core';
์ด์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅ์ ์ถ์ฒ๋ฅผ ๋ช ํํ ๊ตฌ๋ถํ ์ ์์ต๋๋ค:
input()โ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ ๋ฌ๋ ๊ฐrouteBinding()โ ๋ผ์ฐํฐ์์ ์ ๋ฌ๋ ๊ฐ
์์:
id = routeBinding<string>(); // ๋ผ์ฐํฐ์์ ์ ๋ฌ๋ ํ๋ผ๋ฏธํฐ
title = input<string>(); // ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ ๋ฌ๋ ์
๋ ฅ๊ฐ
์ด ์์ ๋ณ๊ฒฝ์ Angular์ ์๋ ๋ฐฉ์์ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์์ง๋ง, ์ฝ๋์ ์๋๋ฅผ ๋ช ํํ ํ๊ณ , ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์๋ฅผ ๊ฐ์ ํฉ๋๋ค.
๐งฑ ์์: Angular 20์์ ๋ช ํํ ๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ
๐น 1๋จ๊ณ: UserComponent ์์ฑ
import { Component, input, input as routeBinding } from '@angular/core';
@Component({
selector: 'app-user',
standalone: true,
template: `
<h2>์ ์ ์ปดํฌ๋ํธ</h2>
<p>๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ ID: <strong></strong></p>
`,
})
export class UserComponent {
id = routeBinding<string>(); // ๋ผ์ฐํฐ์์ ์ ๋ฌ
regularInput = input<string>(); // ๋ถ๋ชจ์์ ์ ๋ฌ
}
๐น 2๋จ๊ณ: ๋ฃจํธ ์ปดํฌ๋ํธ ์ค์
import { Component } from '@angular/core';
import { RouterLink, RouterOutlet } from '@angular/router';
@Component({
selector: 'app-root',
standalone: true,
imports: [RouterOutlet, RouterLink],
template: `
<h1>Angular 20 ๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ ๋ฐ๋ชจ</h1>
<nav>
<a [routerLink]="['/user', 42]">/user/42 ์ด๋</a>
</nav>
<router-outlet/>
`,
})
export class AppComponent {}
๐น 3๋จ๊ณ: ๋ผ์ฐํฐ ์ค์ ๋ฐ ์ฑ ๋ถํธ์คํธ๋ฉ
import { bootstrapApplication } from '@angular/platform-browser';
import { provideRouter, Routes, withComponentInputBinding } from '@angular/router';
import { AppComponent } from './app.component';
import { UserComponent } from './user.component';
const routes: Routes = [
{
path: 'user/:id',
component: UserComponent,
},
];
bootstrapApplication(AppComponent, {
providers: [provideRouter(routes, withComponentInputBinding())],
});
โ ์์ฝ
| ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|
withComponentInputBinding() |
๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ปดํฌ๋ํธ ์ ๋ ฅ์ ์๋ ์ฐ๊ฒฐ |
| ๋ณ์นญ ์ฌ์ฉ | routeBinding() ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ์ฝ๋ ์๋ ๋ช
ํํ |
| Angular 20 ์๋ฒฝ ํธํ | ์คํ ๋์ผ๋ก ์ปดํฌ๋ํธ ๋ฐ ์๊ทธ๋ ์ํคํ ์ฒ์ ์ต์ |
| DX ํฅ์ | ๋ ์ฌ์ด ๋๋ฒ๊น ๊ณผ ํ์ ๊ฐ๋ฅ |
๐ ๋ง๋ฌด๋ฆฌ ์๊ฐ
๋น๋ก withComponentInputBinding()์ ์ด์ ๋ฒ์ ์ ๋์
๋ ๊ธฐ๋ฅ์ด์ง๋ง, Angular 20์ ์ด ๊ธฐ๋ฅ์ ๋์
ํ๊ธฐ์ ์๋ฒฝํ ์์ ์
๋๋ค. ์คํ ๋์ผ๋ก ์ปดํฌ๋ํธ์ ์๊ทธ๋ ์ค์ฌ ์ํคํ
์ฒ๊ฐ ์ค์ฌ์ด ๋ ์ง๊ธ, ๋ผ์ฐํ
๋ฐฉ์๋ ํ ๋จ๊ณ ์งํํ ํ์๊ฐ ์์ต๋๋ค.
input()์ ๋ผ์ฐํธ ํ๋ผ๋ฏธํฐ์ฉ์ผ๋ก aliasํ์ฌ ์ฌ์ฉํ๋ ์ด ์์ ํธ๋ฆญ์ ์ฝ๋ ์๋๋ฅผ ๋ช
ํํ ํ๊ณ , ํ์
๊ณผ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
๐ฌ ์ฌ๋ฌ๋ถ์ ์๊ฐ์?
์ด ๋ณ์นญ ํจํด์ Angular 20 ํ๋ก์ ํธ์ ๋์
ํด๋ณด์๊ฒ ์ต๋๊น?
Angular์์ ๊ณต์์ ์ผ๋ก @RouteParam() ๊ฐ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๋์
ํ๋ฉด ์ข์๊น์?