티스토리 뷰
Angular : Email Client - 2-1. 이메일 모듈작성 - 레이아웃 만들기
Korean Eagle 2020. 6. 24. 22:481. 이 포스트는 Email Client를 작성하는 시리즈의 일부이다
1-1 1부는 인증에 관련된 부분을 다루었다.
1-2 2부는 REST서비스를 제공하는 서버를 이용하여 email을 보내고 받는 방법에 대해서 작성한다.
2. 우선 생각나는 대로 컴포넌트를 생성했다.
2-1 왼쪽에 30% 공간에 메일 작성버튼 EmailCompose과 메일 목록이 표시될 EmailList컴포넌트를 생성한다.
2-2 오른쪽에 70% 공간을 차지할 Email 내용 표시 공간 EmailView 컴포넌트를 생성한다.
2-3 오른쪽에 위치할 특정메일 선택시 보여줄 EmailContent 컴포넌트를 생성한다.
2-4 이메일 데이터에 대한 요청을 수행할 Email 서비스는 가장 처음 포스트에서 이미 생성하였다.
2-5 아래의 명령어를 실행하니 모듈이 2개가 있다고 생성이 안되었다.
2-5-1 --skip-import 옵션은 module에 import하는 부분을 자동으로 해주지 않아 일일히 다 선언하고 추가해야 한다.
3. 차례대로 template을 작성한다.
3-0 전체를 감싸는 레이아웃인 home 컴포넌트를 작성한다.
3-0-1 30:70의 크기로 분할되었고 우측의 컴포넌트는 url에 따라 달라지도록 라우팅처리하였다.
3-0-2 좌측은 기본적으로 메일 작성 버튼과 리스트를 표출한다.
<div class="row">
<div class="col-sm-4">
<app-email-compose></app-email-compose>
<app-email-list></app-email-list>
</div>
<div class="col-sm-8">
<router-outlet></router-outlet>
</div>
</div>
3-1 이메일 모듈 내의 라우팅 테이블를 정리한다.
3-1-1 우선 메일 /inbox로 url 이 지정되면 우측 페이지에 EmailView 컴포넌트를 표출하게 하였다.
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { EmailViewComponent } from './email-view/email-view.component';
const routes: Routes = [
{
path: '',
component: HomeComponent,
children: [{ path: '', component: EmailViewComponent }],
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class EmailRoutingModule {}
3-2 메일 리스트 template를 다음과 같이 작성한다.
3-2-1 카드를 사용하여 전체를 감싸고 이메일리스트를 보여 준다.
3-2-2 여기에는 하드코딩을 하여 레이아웃 보여주기 용으로 작성하였다. 나중에 ngFor로 바꿀거다.
<div class="card">
<div class="card-body py-1">
<h6 class="card-title mb-0 trim">Welcome to My website</h6>
<small class="card-text trim">heops79@gmail.com</small>
<hr class="mt-1 mb-0">
</div>
<div class="card-body py-1">
<h6 class="card-title mb-0 trim">Welcome to My website</h6>
<small class="card-text trim">heops79@gmail.com</small>
<hr class="mt-1 mb-0">
</div>
<div class="card-body py-1">
<h6 class="card-title mb-0 trim">Welcome to My website</h6>
<small class="card-text trim">heops79@gmail.com</small>
<hr class="mt-1 mb-0">
</div>
<div class="card-body py-1">
<h6 class="card-title mb-0 trim">Welcome to My website</h6>
<small class="card-text trim">heops79@gmail.com</small>
<hr class="mt-1 mb-0">
</div>
<div class="card-body py-1">
<h6 class="card-title mb-0 trim">Welcome to My website</h6>
<small class="card-text trim">heops79@gmail.com</small>
<hr class="mt-1 mb-0">
</div>
<div class="card-body py-1">
<h6 class="card-title mb-0 trim">Welcome to My website</h6>
<small class="card-text trim">heops79@gmail.com</small>
<hr class="mt-1 mb-0">
</div>
</div>
3-3 메일 Compose 컴포넌트는 버튼 하나만 되어 있는 단순한 컴포넌트이다.
3-3-1 버튼을 누르면 메일작성 modal 팝업되도록 작성할 예정이다.
<button class="mb-1 p-2 btn-block btn-secondary">Compose</button>
3-4 이제 오른쪽 이메일 모듈 내의 기본 라우팅으로 표출될 EmailView template을 작성한다.
3-4-1 fa fa-envelope은 font awesome의 아이콘이다.
<div class="crad text-center">
<i class="display-2 fa fa-envelope mt-5"></i>
<h3 class="mb-5">Select an Email to get started</h3>
</div>
3-5 이메일 모듈에 여기에서 작성한 모듈이 모두 선언되어 있어야 정상적으로 동작한다.
3-5-1 email.module.ts 파일
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HomeComponent } from './home/home.component';
import { EmailRoutingModule } from './email-routing.routing.module';
import { EmailListComponent } from './email-list/email-list.component';
import { EmailComposeComponent } from './email-compose/email-compose.component';
import { EmailViewComponent } from './email-view/email-view.component';
@NgModule({
declarations: [
HomeComponent,
EmailListComponent,
EmailComposeComponent,
EmailViewComponent,
],
imports: [CommonModule, EmailRoutingModule],
})
export class EmailModule {}
4. 결과화면 표출하기
4-1 지금까지 한 것들 - 로그인 후 /inbox로 진입을 실행한 화면
4-2 개인적으로 메뉴바가 dark theme이 좋은 것 같다.
4-2-1 app.component.html에 약간 수정했다.
<nav class="navbar navbar-expand-lg navbar-dark bg-dark mb-3">
<a class="navbar-brand" [routerLink]="'.'">
EM<i class="fas fa-paper-plane bg-light text-dark m-0"></i>IL
</a>
<!-- Step 3: Toggle the value of the property when the toggler button is clicked. -->
<button class="navbar-toggler" type="button" (click)="isMenuCollapsed = !isMenuCollapsed">
☰
</button>
<!-- Step 2: Add the ngbCollapse directive to the element below. -->
<div [ngbCollapse]="isMenuCollapsed" class="collapse navbar-collapse">
<ul class="navbar-nav">
<li class="nav-item">
<!-- Step 4: Close the menu when a link is clicked. -->
<a class="nav-link" [routerLink]="'/inbox'" (click)="isMenuCollapsed = true"
[routerLinkActive]="'active'">Inbox</a>
</li>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<!-- Step 4: Close the menu when a link is clicked. -->
<a class="nav-link" [routerLink]="'/auth/signOut'" (click)="isMenuCollapsed = true"
[routerLinkActive]="'active'" *ngIf="signedIn$ | async">Sign Out</a>
</li>
<ng-container *ngIf="!(signedIn$ | async)">
<li class="nav-item">
<a class="nav-link" [routerLink]="'/auth/signUp'" (click)="isMenuCollapsed = true"
[routerLinkActive]="'active'">Sign Up</a>
</li>
<li class="nav-item">
<a class="nav-link" [routerLink]="'/auth/signIn'" (click)="isMenuCollapsed = true"
[routerLinkActive]="'active'">Sign In</a>
</li>
</ng-container>
</ul>
</div>
</nav>
<div class="container">
<router-outlet></router-outlet>
</div>
'Demos > Email Client' 카테고리의 다른 글
Angular : Email Client - 2-3. 이메일 모듈작성 - 이메일 목록 읽어오기 (0) | 2020.06.25 |
---|---|
Angular : Email Client - 2-2. 이메일 모듈작성 - 로그인 유저정보 관리 (0) | 2020.06.24 |
Angular : Email Client - 1-10. 인증모듈작성 - 로그아웃 (0) | 2020.06.24 |
Angular : Email Client - 1-9. 인증모듈작성 - 쿠키 관리 (0) | 2020.06.24 |
Angular : Email Client - 1-8. 인증모듈작성 - 가입하기와 로그인 로직 작성하기 (0) | 2020.06.23 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib