์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค!
์ค๋์ Angular์์ ํ๋ฉด์ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ธ Router์ ๋ํด ๋ค๋ค๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
ํ๋ก์ ํธ ์ค์
ํ๋ก์ ํธ ์์ฑ ์์ "Would you like to Angular routing?(๋ ์ต๊ทค๋ฌ ๋ผ์ฐํ ์ฌ์ฉํ ๊ฑฐ์ผ?)" ๋ผ๊ณ ๋ฌป๋๋ฐ,
์ฌ๊ธฐ์ y๋ฅผ ํด์ค๋๋ค.
login(๋ก๊ทธ์ธ) ํ๋ฉด์ ๋ง๋ค์ด ์ค๋๋ค.
ng g c pages/login
register(ํ์๊ฐ์ ) ํ๋ฉด์ ๋ง๋ค์ด ์ค๋๋ค.
ng g c pages/register
app-routing.modules.ts
Routes์ ์ํ๋ endPoint์ component(ํ๋ฉด)๋ค์ ์ธํ ํด์ค๋๋ค.
const routes: Routes = [
{ path: 'login', component: LoginComponent },
{ path: 'register', component: RegisterComponent }
];
ํ๋ฉด์ ํ์ธํ๊ธฐ ์ํด์ ์ต๊ทค๋ฌ ํ๋ก์ ํธ๋ฅผ ์คํ์์ผ ๋ด ๋๋ค.
ng serve
๊ธฐ๋ณธ ๋ผ์ฐํ ์ค์
์ด๋ ๊ฒ ํ๋ฉด ์๋์ ๊ฐ์ด ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋ app.component.html์ ํ๋ฉด์ด ๋์ฌ๊ฑฐ์์.
app.component.html
๊ทธ๋ ๋ค๋ฉด ๊ธฐ๋ณธ ํ๋ฉด ๋ผ์ฐํ ์ค์ ์ ์ด๋ป๊ฒ ํ ๊น์?
์ฐ์ app.component.html ์ฝ๋๋ฅผ ๋ชจ๋ ์ง์ฐ๊ณ ์๋์ ๊ฐ์ด ์์ฑํด ์ค๋๋ค.
์๋ ๋ป์ ๊ธฐ๋ณธ์ผ๋ก ๋จ๋ ํ๋ฉด์ router์ ๋ง๊ฒ ๋์ธ๊ฑฐ์ผ ๋ผ๋ ๋ป์ ๋๋ค.
(๊ธฐ๋ณธ์ผ๋ก ๋จ๋ ํ๋ฉด์ endPoint๊ฐ '' ์๋ฌด๊ฒ๋ ์๋ ํ๋ฉด ex) http://localhost:4200์ ๋ปํฉ๋๋ค.)
<div class="container">
<router-outlet></router-outlet>
</div>
app-routing.modules.ts
๊ทธ๋ ๋ค๋ฉด Routes์ endPoint๊ฐ ์์ ๋ ๊ธฐ๋ณธ ํ๋ฉด์ ์ค์ ํด ์ค์ผ๊ฒ ์ฃ ?
์๋์ ๊ฐ์ด login ํ๋ฉด์ ๊ธฐ๋ณธ์ผ๋ก ์์๋๋๋ก ์ค์ ํด ์ค๋๋ค.
const routes: Routes = [
{path: '', redirectTo: '/login', pathMatch: 'full'},
...
];
์ด๋ ๊ฒ ํ๋ฉด http://localhost:4200๋ก ์ด๋ํ๋ฉด ์๋์ผ๋ก login ํ๋ฉด์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋์ด ๋ก๊ทธ์ธ ํ๋ฉด์ด ๊ธฐ๋ณธ ํ๋ฉด์ผ๋ก ๋ณด์ฌ์ง๋๋ค.
ํ๋ฉด ์ด๋ํ๊ธฐ
login.component.html
register๋ก ์ด๋ํ๊ธฐ ์ํ ๋ฒํผ์ ํ๋ ๋ง๋ค์ด ์ค๋๋ค.
<div class="container">
<button (click)="login()" class="route-button"> Go to Register </button>
</div>
login.component.ts
Router๋ฅผ import ํด์ฃผ๊ณ ,
import { Router } from '@angular/router';
์์ฑ์์ router๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
constructor(private router:Router) { }
login ๋ฉ์๋์ ์ด๋ํ ํ๋ฉด(register)๋ก navigate ํด์ค๋๋ค.
login() {
this.router.navigate(['/register'])
}
login.component.css (Optional)
๋ฒํผ ์์น๋, ๋์์ธ ํ๊ณ ์ถ์ ๋ถ๋ค์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
.container {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.route-button {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
left: 50%;
top: 40%;
transform: translateX(-50%);
text-decoration: none;
color: white;
border: white solid 0.2rem;
font-size: 1rem;
font-weight: bold;
text-transform: uppercase;
width: 15rem;
padding: 1.5rem;
background-color: rgb(55, 55, 55);
}
Test
์๋์ ๊ฐ์ด Go to register ๋ฒํผ์ ๋๋ฅด๋ฉด
์๋์ ๊ฐ์ด register ํ๋ฉด์ผ๋ก ์ด๋๋๊ฒ ๋ฉ๋๋ค.
์ด์ ํ๋ฉด์ผ๋ก ๋๋์ ๊ฐ๊ธฐ
์ง๊ธ ์์ฑํ๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ Login๊ณผ Register ๋ฐ์ ์์ด์ ์ด์ ํ๋ฉด์ด ์ด๋์ง ์ ํํ ์ ์ ์์ง๋ง,
ํ๋ฉด์ด ๋ง์์ง๊ณ , ๊ธฐ๋ฅ์ด ๋ง์์ง์๋ก ์ด์ ํ๋ฉด์ด ์ด๋์ง ์ ๋ ๊ฒ์ ๊ฝค ๊น๋ค๋ก์ด ์ผ์ ๋๋ค.
๊ณ ๋ก ์ด๋ํ ๋ฐ๋ก ์ด์ ์ ํ๋ฉด์ผ๋ก ๋๋์ ๊ฐ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํ๋๋ฐ์.
register.component.html
Login ํ๋ฉด๊ณผ ๊ฐ์ด ๋ฒํผ์ ๋ง๋ค์ด ์ค๋๋ค.
<div class="container">
<button (click)="back()" class="route-button"> Back to Previous</button>
</div>
register.component.ts
Login ํ๋ฉด๊ณผ ๊ฐ์ด router ์ค์ ์ ํด์ค ๋ค ์๋์ ๊ฐ์ด '..' ์ผ๋ก endPoint๋ฅผ ์ค์ ํด ์ค๋๋ค.
back() {
this.router.navigate(['\..']);
}
์ด๋ ๊ฒ ํ๋ฉด ์๋์ ๊ฐ์ด Back ๋ฒํผ์ ๋๋ฅด๋ฉด Login ํ๋ฉด์ผ๋ก ์ด๋๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋๊ธ