아이콘은 일반적인 이미지 형태로 제공 되어 문장의 성격을 암시하기도 Button에 삽입되기도 합니다.

 

이미 많은 카테고리 별로 아이콘이 구분되어 제공 되고 있고 google 이외에도 자체 제작한 아이콘을 제공하고 있는 업체들도 많이 있어 선택의 폭이 넓습니다.

 


1. 아이콘 사용법

 

1.1 일반적인 사용법


<mat-icon></mat-icon> 태그를 이용하면 어디서나 사용 가능 합니다.

그리고 태그 사이에 아이콘 명칭을 기입합니다.

 

<mat-icon>android</mat-icon>

이렇게 하면 화면에서 안드로이드 아이콘이 나오는 것을 확인 할 수 있습니다.



 

1.2 사이즈 조절


angular material iconfont 사이트 조절과 같은 방식으로 해주면 적용 됩니다.


css를 설정하고

.material-icons.md-18 { font-size: 18px; }

.material-icons.md-48 { font-size: 48px; }

 

<mat-icon class="material-icons md-18">android</mat-icon>

<mat-icon class="material-icons md-48">android</mat-icon>

 

적용을 하면 됩니다.

 



 

1.3 색상 조절


size를 일반 폰트처럼 한다고 했으니 색상도 동일 하겠죠?

좀 큰 폰트에 오랜지 색과 파란색을 정의 합니다.


.material-icons.md-48.orange { font-size: 48px; color: #FB8C00; }

.material-icons.md-48.blue { font-size: 48px; color: #0000FF; }

 

그리고 적용을 합니다.

 

<mat-icon class="material-icons md-48 orange">android</mat-icon> &nbsp;&nbsp;

<mat-icon class="material-icons md-48 blue">android</mat-icon>

 

&nbsp;&nbsp; 이걸 안하면 넘 붙어있어서 자체 검열



나 사진 찍을 때랑 똑 같은 차렸자세.


 

1.4 투명도 조절


아이콘은 투명도 조절도 가능 합니다.

투명도 적용을 하려면 css에서 alpha 값을 0.0 에서 1.0 까지의 값을 적용 합니다.

0.0을 적용하면 화면에 보이지 않기 때문에 0.1로 했습니다.


.material-icons.md-48.blue100 { font-size: 48px; color: rgba(0, 0, 255, 1); }

.material-icons.md-48.blue10 { font-size: 48px; color: rgba(0, 0, 255, 0.1); }

 

적용을 해서 확인해 봅니다.

<mat-icon class="material-icons md-48 blue100">android</mat-icon> &nbsp;&nbsp;

<mat-icon class="material-icons md-48 blue10">android</mat-icon>

 


 

 

2. 전체 적용

 

위에서 설명한 내용을 전체 적용해 보았습니다.

 

2.1 css 파일

.material-icons.md-18 { font-size: 18px; }
.material-icons.md-24 { font-size: 24px; }
.material-icons.md-36 { font-size: 36px; }
.material-icons.md-48 { font-size: 48px; }

.material-icons.md-48.orange { font-size: 48px; color: #FB8C00; }
.material-icons.md-48.blue { font-size: 48px; color: #0000FF; }
.material-icons.md-48.blue100 { font-size: 48px; color: rgba(0, 0, 255, 1); }
.material-icons.md-48.blue50 { font-size: 48px; color: rgba(0, 0, 255, 0.5); }
.material-icons.md-48.blue10 { font-size: 48px; color: rgba(0, 0, 255, 0.1);


2.2 html 파일

<table>
    <tr>
        <td width="50" align="right"><mat-icon class="material-icons md-18">android</mat-icon></td>
        <td>.material-icons.md-18 { font-size: 18px; } </td>
    </tr>
    <tr>
        <td width="50" align="right"><mat-icon class="material-icons md-24">android</mat-icon></td>
        <td>.material-icons.md-24 { font-size: 24px; } </td>
    </tr>
    <tr>
        <td width="50" align="center"><mat-icon class="material-icons md-36">android</mat-icon></td>
        <td>.material-icons.md-36 { font-size: 36px; } </td>
    </tr>
    <tr>
        <td><mat-icon class="material-icons md-48">android</mat-icon></td>
        <td>.material-icons.md-48 { font-size: 48px; } </td>
    </tr>
    <tr>
        <td><mat-icon class="material-icons md-48 orange">android</mat-icon></td>
        <td>.material-icons.md-48.orange { font-size: 48px; color: #FB8C00; }</td>
    </tr>

    <tr>
        <td><mat-icon class="material-icons md-48 blue">android</mat-icon></td>
        <td>.material-icons.md-48.blue { font-size: 48px; color: #0000FF; }</td>
    </tr>
    <tr>
        <td><mat-icon class="material-icons md-48 blue100">android</mat-icon></td>
        <td>.material-icons.md-48.blue100 { font-size: 48px; color: rgba(0, 0, 255, 1); }</td>
    </tr>
    <tr>
        <td><mat-icon class="material-icons md-48 blue50">android</mat-icon></td>
        <td>.material-icons.md-48.blue50 { font-size: 48px; color: rgba(0, 0, 255, 0.5); }</td>
    </tr>
    <tr>
        <td><mat-icon class="material-icons md-48 blue10">android</mat-icon></td>
        <td>.material-icons.md-48.blue10 { font-size: 48px; color: rgba(0, 0, 255, 0.1); }</td>
    </tr>
</table>


2.3 결과


angular material icon



3. 아이콘 종류


현재 재공되고 있는 아이콘의 카테고리 별 종류의 아주 일부분을 가져와 보았습니다.

참조한 사이트는

https://material.io/tools/icons/?style=baseline

입니다.

 


3.1 Action

 



3.2 Alert




3.3 Av




3.4 Communication




3.5 Content




3.6 Device




3.7 Editor




3.8 File




3.9 Hardware




3.10 Image




3.11 Maps




3.12 Navigation




3.13 Notification




3.14 Places




3.15 Social




3.16 Toggle



- copy coding -


Angular material에서 제공하는 버튼은 바로 기본적으로 제공하고 있는 기능 만으로도 충분히 사용 가능 합니다.

다양한 형태 및 기본으로 제공되는 아이콘만으로도 혼자서 사이트를 꾸미는 것도 가능하리라 생각 됩니다.


버튼의 종류에 대한 간단한 설명을 한다면


속성

 설명

 mat-button

 사각형 텍스트 버튼으로 채우기, 테두리, 높이가 없다

 mat-stroked-button

 사각형 텍스트 버튼으로 테두리가 있고 채우기, 높이가 없다

 mat-flat-button

 사각형 텍스트 버튼으로 채우기가 있고 높이가 없다

 mat-raised-button

 사각형 텍스트 버튼으로 채우기, 테두리, 높이가 있다

 mat-fab

 원형 버튼으로 텍스트, 아이콘을 추가할 수 있다

 mat-mini-fab

 작은 원형 버튼으로 텍스트, 아이콘을 추가할 수 있다

 mat-icon-button

 투명한 버튼으로 아이콘을 추가 할 수 있다


이렇게 설명을 할 수가 있겠고요.


버튼의 모양은


angular button tag


각 속성별로 이렇게 생겼습니다.

 

그럼 구현을 해보도록 하겠습니다.

 

 

1. Component 추가

 

제일 먼저 component 추가를 해보겠습니다.

component가 화면 하나를 만드는 것으로 생각 하면 됩니다.


프로젝트에 마우스를 놓고 우측 버튼을 클릭 합니다.

 

New > Component

 

를 선택 하면 컴포넌트 생성 팝업 창이 나타납니다.



저는 새로 생성하는 component 명칭을

material-test

로 하였습니다.



[Finish] 버튼을 클릭하고 잠시 기다립니다.


시간이 지나면 프로젝트에 material-test 폴더가 생기고 파일들도 만들어 집니다.




2. 화면 추가

 

material-test로 화면을 만들었으니 웹 브라우저에서 볼 수 있도록 추가를 해줘야 합니다.

 

material-test.component.ts

파일에 명시된

app-material-testindex.htm에 추가하는 작업입니다.


2.1 module에 추가

 

/myNgProject/src/app/app.module.ts

파일을 열어보니 생성하면서 자동으로 material-test component import 되어 있습니다.


import { MaterialTestComponent } from './material-test/material-test.component';


자동으로 import 되었다고 화면도 자동으로 연결 되는게 아닙니다.

이걸 사용하려면 bootstrap에 추가를 해주어야 합니다.


bootstrap: [AppComponent, MaterialTestComponent]



2.2 html에 추가


module에 추가해서 사용 할 수 있도록 했으니 이제 화면에 추가를 합니다.


/myNgProject/src/index.html

파일을 열고 추가를 합니다.


<app-material-test></app-material-test>


이제 새로 생성한 material-test.component.html HTML 작업을 하면 index.html에 나타나게 됩니다.

 


2.3 버튼 html 작업


새로 추가한 material-test.component.html에 버튼 관련 html tag 작업을 진행 합니다.


html 일부분을 가져와 보았습니다.


<h3>mat-raised-button</h3>
<div class="button-row">
  <button mat-raised-button>Basic</button>
  <button mat-raised-button color="primary">Primary</button>
  <button mat-raised-button color="accent">Accent</button>
  <button mat-raised-button color="warn">Warn</button>
  <button mat-raised-button disabled>Disabled</button>
  <a mat-raised-button routerLink=".">Link</a>
</div>

이런식으로 작업을 하면 되겠죠.

 

이렇게 하면 화면 작업은 끝입니다.

이제 설정을 해야 합니다.

 


3. 버튼 환경 설정

 

html에 버튼 태그 작업을 하면 바로 적용 되는게 아니라 angular에서 제공하는 module, css등을 추가해야 합니다.

 

3.1 Module 추가


/myNgProject/src/app/app.module.ts

파일을 열고 버튼과 버튼에 추가하는 아이콘 관련 모듈을 추가해 줍니다.


import { MatButtonModule } from '@angular/material/button';

import { MatIconModule } from '@angular/material/icon';


그리고 imports에 모듈명을 추가해 줍니다.

 

이건 일부분만 가져오기 그래서 전체적인 파일 모습은

 

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { CompanyVisionComponent } from './company-vision/company-vision.component';

// Material - animation
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MaterialTestComponent } from './material-test/material-test.component';

@NgModule({
  declarations: [
    AppComponent,
    CompanyVisionComponent,
    MaterialTestComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MatFormFieldModule,
    MatInputModule,
    MatButtonModule,
    MatIconModule
  ],
  providers: [],
  bootstrap: [AppComponent, MaterialTestComponent]
})
export class AppModule { }


이렇습니다.



3.2 css 추가


CSS를 추가하는 방법은 2가지가 있습니다.

 

index.html 파일에 링크형식으로 불러서

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

이렇게 추가 하거나


/src/styles.css 파일에


@import url("https://fonts.googleapis.com/icon?family=Material+Icons");

요렇게 추가하면 됩니다.


저는 개인적으로 두번째를 선호합니다.

 


4. 테스트


모든 작업이 완료 되었습니다.

테스트를 진행 하면 됩니다.

 

프로젝트에 마우스를 대고 우측 버튼 > Run As > Angular Web Application을 선택하면

결과를 보실 수 있습니다.




5. Source Code


Button을 테스트 하기 위해 작업한 파일들이 어떤건지 한번 볼까요?

 



html mode 을 제외하고는 환경설정 관련 입니다.


/src/app/material-test/material-test.component.css

.button-row button,
.button-row a {
  margin-right: 8px;
}


/src/app/material-test/material-test.component.html

<p>
  material button test!
</p>
<h3>mat-button</h3>
<div class="button-row">
  <button mat-button>Basic</button>
  <button mat-button color="primary">Primary</button>
  <button mat-button color="accent">Accent</button>
  <button mat-button color="warn">Warn</button>
  <button mat-button disabled>Disabled</button>
  <a mat-button routerLink=".">Link</a>
</div>

<h3>mat-stroked-button</h3>
<div class="button-row">
  <button mat-stroked-button>Basic</button>
  <button mat-stroked-button color="primary">Primary</button>
  <button mat-stroked-button color="accent">Accent</button>
  <button mat-stroked-button color="warn">Warn</button>
  <button mat-stroked-button disabled>Disabled</button>
  <a mat-stroked-button routerLink=".">Link</a>
</div>

<h3>mat-flat-button</h3>
<div class="button-row">
  <button mat-flat-button>Basic</button>
  <button mat-flat-button color="primary">Primary</button>
  <button mat-flat-button color="accent">Accent</button>
  <button mat-flat-button color="warn">Warn</button>
  <button mat-flat-button disabled>Disabled</button>
  <button mat-flat-button color="warn">favorite</button>
  <a mat-flat-button routerLink=".">Link</a>
</div>

<h3>mat-raised-button</h3>
<div class="button-row">
  <button mat-raised-button>Basic</button>
  <button mat-raised-button color="primary">Primary</button>
  <button mat-raised-button color="accent">Accent</button>
  <button mat-raised-button color="warn">Warn</button>
  <button mat-raised-button disabled>Disabled</button>
  <a mat-raised-button routerLink=".">Link</a>
</div>

<h3>mat-fab</h3>
<div class="button-row">
  <button mat-fab>Basic</button>
  <button mat-fab color="primary">Primary</button>
  <button mat-fab color="accent">Accent</button>
  <button mat-fab color="warn">Warn</button>
  <button mat-fab disabled>Disabled</button>
  <button mat-fab>
    <mat-icon aria-label="icon">free_breakfast</mat-icon>
  </button>
  <a mat-fab routerLink=".">Link</a>
</div>

<h3>mat-mini-fab</h3>
<div class="button-row">
  <button mat-mini-fab>Basic</button>
  <button mat-mini-fab color="primary">Primary</button>
  <button mat-mini-fab color="accent">Accent</button>
  <button mat-mini-fab color="warn">Warn</button>
  <button mat-mini-fab disabled>Disabled</button>
  <button mat-mini-fab>
    <mat-icon aria-label="icon">free_breakfast</mat-icon>
  </button>
  <a mat-mini-fab routerLink=".">Link</a>
</div>

<h3>mat-icon-button</h3>
<div class="button-row">
  <button mat-icon-button>
    <mat-icon aria-label="test">access_alarms</mat-icon>
  </button>
  <button mat-icon-button color="primary">
    <mat-icon aria-label="icon">access_alarms</mat-icon>
  </button>
  <button mat-icon-button color="accent">
    <mat-icon aria-label="icon">access_alarms</mat-icon>
  </button>
  <button mat-icon-button color="warn">
    <mat-icon aria-label="icon">access_alarms</mat-icon>
  </button>
  <button mat-icon-button disabled>
    <mat-icon aria-label="icon">access_alarms</mat-icon>
  </button>
</div>


/src/app/app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { CompanyVisionComponent } from './company-vision/company-vision.component';

// Material - animation
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MaterialTestComponent } from './material-test/material-test.component';

@NgModule({
  declarations: [
    AppComponent,
    CompanyVisionComponent,
    MaterialTestComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MatFormFieldModule,
    MatInputModule,
    MatButtonModule,
    MatIconModule
  ],
  providers: [],
  bootstrap: [AppComponent, MaterialTestComponent]
})
export class AppModule { }


/src/index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>MyNgProject</title>
  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root></app-root>

  <app-material-test></app-material-test>
</body>
</html>


/src/styles.css


/* You can add global styles to this file, and also import other style files */
@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';
@import url("https://fonts.googleapis.com/icon?family=Material+Icons");

- copy coding -


angular에는 총 4개의 테마가 있습니다.

사이트의 성격에 따라 내용도 중요 하지만 컬러가 느낌을 전달 하는데 많은 역할을 하게 되는데요.

 

angular에서 제공하는 테마들이 어떻게 다른가에 대해 결과만 확인해 보겠습니다.

 


1. deeppurple-amber.css


진보라색과 황색이 조화된 구조 입니다.


angular theme

 

2. indigo-pink.css


남색 또는 쪽빛과 핑크색이 주가된 테마입니다.

 



3. pink-bluegrey.css


핑크색과 푸른회색이 섞여 있는 테마 입니다.




4. purple-green.css


자주색과 녹색으로 되어진 테마 입니다.




5. 전체 비교

 

한번에 다 모아놓고 비교를 해보면 차이점을 쉽게 알 수 있습니다.

 

 

이것만 가지고 사이트를 완성 하라고 하는건 아닙니다.


별도로 디자인을 할 수 없는 상황이면 기본적으로 제공하는 테마를 사용하면 되고


필요하다면 테마를 추가하여 사용 할 수 있도록 되어 있습니다.


- copy coding -

 

오늘은 데이터 입력 화면을 하나 만들어 테스트 해보겠습니다.

입력 폼을 두개 만들어 비교를 하고 모양은 아래와 같습니다.


angular material form

 


form을 두개 만들고 데이터를 입력하여 어떻게 처리 되는지 보려고 합니다.


상단 폼은 일반적인 형태의 폼 테그입니다.


두번째는 Angular Material을 사용한 입력 폼 입니다.

 

작업할 파일은 다음 그림과 같습니다.



위에 2개의 파일이 주요 작업 대상이고 나머지는 그냥 설정 파일들 입니다.


작업 순서


이전에 했던  component 추가 파일을 가지고 작업합니다.

[angular] component 추가 방법


1. 먼저 기존 화면을 수정합니다.  기존화면은 Angular 마크가 커다랗게 나왔는데 모두 주석처리 합니다.

2. css 파일 생성

3. html 파일에 form 2개 추가

4. modulematerial 관련 import

5. 변수 및 버튼 클릭 이벤트 함수 생성

6. 테마 추가

7. 화면 테스트


이런식으로 진행 됩니다.


1. 메인 화면 주석 처리


/src/app/app.component.html


파일을 열고 모두 주석 처리를 하여 새로 추가한

/src/app/company-vision/company-vision.component.html 화면만 나오도록 합니다.


 

2. css 파일 생성


company-vision 관련 화면에만 나오도록 하려면 company-vision.component.css 여기에 추가하면 됩니다.

저는 전체에 적용하는 것으로 작업 합니다.



2.1 폴더 및 파일 생성


먼저 css 폴더를 생성 합니다.


assets에 마우스를 놓고 우측 버튼을 클릭해서 New를 선택하고 Folder를 선택합니다.


 

폴더 생성 팝업 창이 나타납니다.


Folder name:css를 입력 합니다.

 


만드는 김에 혹시나 해서 이미지 폴더도 만들었습니다.



Folder name: images를 입력 합니다.

 

생성된 css 폴더에 css 파일을 하나 생성 합니다.

 

css 폴더에 마우스를 놓고 우측 버튼 > New 선택 > Other… 선택



 

창이 열리면 Web찾아서 펼칩니다.


CSS File을 선택하고 하단의 Next 버튼을 클릭 합니다.



 파일 이름을 저는 form.css로 정했습니다. 각자 편한 이름으로 기입하시고 [Finish] 버튼을 클릭 합니다.



form.css 파일이 생성 되었습니다.


필요한 내용을 적어줍니다. 소스는 하단에 추가 하겠습니다.




2.2 CSS 반영


새로 추가한 form.css를 반영해보겠습니다.


/app/company-vision/company-vision.component.ts


파일을 열고 기존 css 파일은 주석처리 또는 삭제하고 신규 파일의 path도 같이 추가를 하면 되는데

css 파일의 path 잡기가 어렵지 않습니다.

자동 완성 기능이 있어서 아주 쉽게 처리 할 수 있습니다.



pathfile도 자동으로 완성 기능이 적용 됩니다.


styleUrls: ['../../assets/css/form.css']



3. html 파일에 form 2개 추가


이제 화면 작업을 진행 합니다.


/src/app/company-vision/company-vision.component.html


파일을 열고 열심히 코딩 합니다.


3.1 일반 형태의 form

<form>
    <h3>Input Data</h3>

    <div>
        <label for="vision1">Vision :</label>
        <input name="vision1" #vision1> 
    </div>
    <div>
        <label for="name1">Name :</label>
        <input name="name1" #name1> 
    </div>
    <div>
        <label for="email1">e-mail :</label>
        <input name="email1" #email1>
    </div>

    <button (click)="addArticle1(vision1, name1, email1.value)">
    Submit
    </button>
</form>
Input Data :  {{name3}} / {{email3}}

 

<input name="vision1" #vision1>

<input name="name1" #name1>

<input name="email1" #email1>

name1email1으로 input을 정의 하였고

 

<button (click)="addArticle1(name1, email1)">

버튼 클릭시 addArticle1() 가 실행되도록 연결하였습니다.

 

Input Data :  {{name3}} / {{email3}}

하단에 입력한 값을 보여주도록 했습니다.



3.2 Material 형태의 form

<div class="divcenter">
 <h3>Input Data2</h3>

<div class="example-container">
    <mat-form-field>
        <input matInput #vision2 placeholder="Vision">
    </mat-form-field>
    <mat-form-field>
        <input matInput #name2 placeholder="Name">
    </mat-form-field>
    <mat-form-field>
        <input matInput #email2 placeholder="e-mail">
    </mat-form-field>
    <div class="example-button-row">
        <button mat-raised-button color="primary"
        (click)="addArticle2(vision2, name2, email2.value)">Submit</button>
    </div>
</div>
</div>

Input Data :  {{name4}} / {{email4}}

 

<input matInput #vision2 placeholder="Vision">

<input matInput #name2 placeholder="Name">

<input matInput #email2 placeholder="e-mail">

 

name2email2으로 input을 정의 하였고

태그들이 mat-으로 시작합니다.

 

<button (click)="addArticle1(vision1, name1, email1.value)">

버튼을 클릭하면 addArticle2() 함수가 실행되도록 하였습니다.

 

입력한 데이터는 화면에서 볼 수 있도록

Input Data :  {{name4}} / {{email4}}

하였고요.



4. modulematerial 관련 import


mat-으로 시작하는 material 태그들이 작동되려면 모듈들을 import 해야 합니다.


/src/app/app.module.ts


파일을 열고 import 해줍니다.


import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

import { MatFormFieldModule } from '@angular/material/form-field';

import { MatInputModule } from '@angular/material';

import { MatButtonModule } from '@angular/material/button';


import 한다고 적용이 되는게 아니고 반영을 해야 합니다.


imports: [

BrowserModule,

BrowserAnimationsModule,

MatFormFieldModule,

MatInputModule,

MatButtonModule

],


뒤에 공백이 있으면 오류가 발생합니다.

앞에 콤마를 찍어도 오류 표시가 나오니까 형식대로 입력 합니다.



5. 변수 및 버튼 클릭 이벤트 함수 생성


이곳에서 실제 코딩이 진행됩니다.


name3: string;

name4: string;

email3: string;

email4: string;


5.1 일반 폼


일반 폼의 버튼을 선택 했을 때 작동하는 이벤트 함수를 생성합니다.

  addArticle1(vision1: HTMLInputElement, name1: HTMLInputElement, email1: string): boolean {
    alert(`Adding article title: ${name1.value} and link: ${email1}`);
    this.companyVision = vision1.value;
    this.name3 = name1.value;
    this.email3 = email1;
    return false;
 }

화면에서 변수를 보낼 때 일반적으로 보내는 방법과 값만 보내는 방법을 사용 했고


addArticle1(vision1, name1, email1.value)


email1은 값만 보내는 방식입니다.


받는 곳에서도 값만 보낸 경우는 string으로 받습니다.


vision1: HTMLInputElement, name1: HTMLInputElement, email1: string

 

받은 값은 변수에 대입할 때도 다르게 적용 합니다.


this.name3 = name1.value;

this.email3 = email1;

 


5.2 Material


두번째 입력 폼은 Angular Material을 사용해 작업을 했습니다.


  addArticle2(vision2: HTMLInputElement, sample1: HTMLInputElement, sample2: string): boolean {
    alert(`Adding article title: ${sample1.value} and link: ${sample2}`);
    this.companyVision = vision2.value;
    this.name4 = sample1.value;
    this.email4 = sample2;
    return false;
 }

그리고 변수도 수정을 했는데요.

보내준 parameter 명을 다르게 받아왔습니다.

사실 실제 코딩에서는 이렇게 해놓으면 헤깔려서 짜증이 나겠죠.

 

vision2: HTMLInputElement, sample1: HTMLInputElement, sample2: string

 

name2sample1으로 email2sample2로 받아 와서 작업을 하였습니다.

 

코딩도 별로 어려울게 없죠?



6. 테마 추가



글을 입력할 때 기존 글자까 휙 하고 위로 올라가는 기능은 테마가 해주는 건데요.


/src/styles.css


파일에 4개의 Theme중 하나를 적어 줍니다.


@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';


4가지 테마는 다음과 같습니다.


deeppurple-amber.css

indigo-pink.css

pink-bluegrey.css

purple-green.css



7. 화면 테스트



이제 테스트를 해볼까요?



 

프로젝트에 마우스를 대고 우측 버튼 > Run As > Angular Web Application을 선택하면

 


 

이제 첫번째 폼에 입력 테스트를 해봅니다.

 


사장이 돈이 오라고 하네요.




직원은 사장 집에 가라 케라 하는군요.



8. Source Code


복사코딩을 위해 소스를 올립니다.


/myNgProject/src/app/company-vision/company-vision.component.html


<h1>
<p>
  company-vision : {{companyVision}}!!
  
</p>
</h1>


<form>
    <h3>Input Data</h3>

    <div>
        <label for="vision1">Vision :</label>
        <input name="vision1" #vision1> 
    </div>
    <div>
        <label for="name1">Name :</label>
        <input name="name1" #name1> 
    </div>
    <div>
        <label for="email1">e-mail :</label>
        <input name="email1" #email1>
    </div>

    <button (click)="addArticle1(vision1, name1, email1.value)">
    Submit
    </button>
</form>
Input Data :  {{name3}} / {{email3}}

<div class="divcenter">
 <h3>Input Data2</h3>

<div class="example-container">
    <mat-form-field>
        <input matInput #vision2 placeholder="Vision">
    </mat-form-field>
    <mat-form-field>
        <input matInput #name2 placeholder="Name">
    </mat-form-field>
    <mat-form-field>
        <input matInput #email2 placeholder="e-mail">
    </mat-form-field>
    <div class="example-button-row">
        <button mat-raised-button color="primary"
        (click)="addArticle2(vision2, name2, email2.value)">Submit</button>
    </div>
</div>
</div>

Input Data :  {{name4}} / {{email4}}


/myNgProject/src/app/company-vision/company-vision.component.ts


import { Component, OnInit } from '@angular/core';
import { Alert } from 'selenium-webdriver';

@Component({
  selector: 'app-company-vision',
  templateUrl: './company-vision.component.html',
  styleUrls: ['../../assets/css/form.css']
  /*styleUrls: ['./company-vision.component.css'] */
})
export class CompanyVisionComponent implements OnInit {

  companyVision: string;
  name3: string;
  name4: string;
  email3: string;
  email4: string;
  constructor() {
    this.companyVision = 'Good Good!!';
    this.name3 = ' ';
    this.email3 = ' ';
  }

  addArticle1(vision1: HTMLInputElement, name1: HTMLInputElement, email1: string): boolean {
    alert(`Adding article title: ${name1.value} and link: ${email1}`);
    this.companyVision = vision1.value;
    this.name3 = name1.value;
    this.email3 = email1;
    return false;
 }

  addArticle2(vision2: HTMLInputElement, sample1: HTMLInputElement, sample2: string): boolean {
    alert(`Adding article title: ${sample1.value} and link: ${sample2}`);
    this.companyVision = vision2.value;
    this.name4 = sample1.value;
    this.email4 = sample2;
    return false;
 }



  ngOnInit() {
  }

}

/myNgProject/src/app/app.component.html


얘는 전체 주석처리만 했음.


/myNgProject/src/app/app.module.ts


import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { CompanyVisionComponent } from './company-vision/company-vision.component';

// Material - animation
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material';
import { MatButtonModule } from '@angular/material/button';

@NgModule({
  declarations: [
    AppComponent,
    CompanyVisionComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MatFormFieldModule,
    MatInputModule,
    MatButtonModule
  ],
  providers: [],
  bootstrap: [AppComponent, CompanyVisionComponent]
})
export class AppModule { }


/myNgProject/src/assets/css/form.css


@charset "UTF-8";

form {
    margin: 0 auto;
    width: 500px;
    padding: 10px;
    border: 1px solid #CCC;
    background-color: #cccccc;
}

form div + div {
    margin-top: 5px;
}

label {
    display: inline-block;
    width: 100px;
    text-align: right;
}

input, textarea {
    width: 300px;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

textarea {
    vertical-align: top;
    height: 100px;
}

button {
    margin-left: 10em;
}

.example-container {
  display: flex;
  flex-direction: column;
}

.example-container > * {
  width: 100%;
}

.example-button-row button,
.example-button-row a {
  margin-right: 8px;
}

.divcenter {
    margin: 0 auto;
    width: 500px;
}


/myNgProject/src/styles.css


/* You can add global styles to this file, and also import other style files */
@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';

- copy coding -


1···106107108109110111112···118

+ Recent posts