๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Frontend/Angular

[Angular] NgForm์ด๋ž€? (feat. ngModel,ngSubmit,required)

by Fomagran ๐Ÿ’ป 2022. 3. 15.
728x90
๋ฐ˜์‘ํ˜•

 

ngForm์ด๋ž€?

 

์›ํ•˜๋Š” ์–‘์‹์„ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์ง€์‹œ์–ด ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

 

์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•„๋ž˜์™€ ๊ฐ™์ด html ํŒŒ์ผ์— ์ž‘์„ฑํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ ngSubmit์€ ์–‘์‹์— ์ •๋ณด๋ฅผ ๊ธฐ์ž…ํ•˜๊ณ  ํ•ด๋‹น ์ •๋ณด(๋ฐ์ดํ„ฐ)๋ฅผ ์ œ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

<form #์›ํ•˜๋Š”ํผ์ด๋ฆ„ = "ngForm" (ngSubmit) = "ํ•จ์ˆ˜(์›ํ•˜๋Š”ํผ์ด๋ฆ„)">

 

ํ•ด๋‹น ํผ ์•ˆ์— ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ๊ธฐ์ž…ํ•  elements๋“ค์„ ๋„ฃ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ elements์—” ngModel ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

ngModel์€ FormControl์˜ ์ผ์ข…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ง€์‹œ์–ด๋‹ค.


app.module.ts

 

ngForm์€ FormsModule์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ง€์‹œ์–ด์ด๋ฏ€๋กœ FormsModule์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, FormsModule],
  providers: [],
  bootstrap: [AppComponent],
})

app.component.html

 

์•„๋ž˜์™€ ๊ฐ™์ด ์œ ์ €์˜ ์ด๋ฆ„,๋‚˜์ด,์ด๋ฉ”์ผ,์ž๊ธฐ์†Œ๊ฐœ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํผ(์–‘์‹)์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

<form #userInfoform = "ngForm" (ngSubmit) = "onSubmit(userInfoform)" >
  <input type = "text" name = "name" placeholder = "์ด๋ฆ„" ngModel required>
  <br/>
  <input type = "number" name = "age" placeholder = "๋‚˜์ด" ngModel>
  <br/>
  <input type = "email" name = "email" placeholder = "์ด๋ฉ”์ผ" ngModel>
  <br/>
  <textarea name = "message" placeholder = "์ž๊ธฐ์†Œ๊ฐœ" ngModel></textarea>
  <br/>
  <button>ํ™•์ธ</button>
</form>

app.component.ts

 

์–‘์‹์„ ์ œ์ถœํ–ˆ์„ ๋•Œ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  onSubmit ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ธ์ž๊ฐ’์œผ๋กœ NgForm์„ ๋ฐ›์•„์ค€๋‹ค.

 

export class AppComponent {
  users: User[] = [];

  onSubmit(form: NgForm) {
    this.addUser(form.value);
    console.log(this.users);
  }

  addUser(user: User) {
    this.users.push(user);
  }
}

user.ts

 

ํผ(์–‘์‹)์— ๋งž๊ฒŒ ์œ ์ €์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•ด์ค€๋‹ค.

 

export interface User {
  name: string;
  email: string;
  age: number;
  introduction: string;
}

Test

 

์•„๋ž˜์™€ ๊ฐ™์ด ์œ ์ € ์ •๋ณด๋ฅผ ๊ธฐ์ž…ํ•œ ๋’ค ํ™•์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด

 

 

์œ„์—์„œ ๊ธฐ์ž…ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ์œ ์ €๊ฐ€ ์ถ”๊ฐ€๋œ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ฐ์ฒด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•„๋ž˜์™€ ๊ฐ™์ด ํผ์˜ value์˜ ํŠน์ • ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 onSubmit(form: NgForm) {
    console.log(form.value.name);
  }

 

ํผ ์•ˆ์˜ ์ด๋ฆ„์˜ ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

 


Required

 

์œ„์—์„œ ์ด๋ฆ„์„ ์ ๋Š” input์— required๋ผ๊ณ  ์ ํ˜€์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๊ฒƒ์€ ๋ฐ˜๋“œ์‹œ ์ฑ„์›Œ์ ธ์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ด๊ฒƒ์„ ํ†ตํ•ด์„œ validation(์œ ํšจ์„ฑ)์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

 

...
<input type = "text" name = "name" placeholder = "์ด๋ฆ„" ngModel required>
...

 

onSubmit์—์„œ form์˜ ์œ ํšจ์„ฑ์„ ์ถœ๋ ฅํ•ด๋ณด๋ฉด

 

  onSubmit(form: NgForm) {
    this.addUser(form.value);
    console.log(form.valid)
  }

 

์•„๋ž˜์™€ ๊ฐ™์ด required๋œ input์„ ์ฑ„์šฐ์ง€ ์•Š์œผ๋ฉด

 

 

false๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€