Skip to content

Commit dd5b10c

Browse files
author
majid noureddine
committed
angular form by reactive method
1 parent 853db7e commit dd5b10c

File tree

11 files changed

+156
-3
lines changed

11 files changed

+156
-3
lines changed

src/app/app.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<li routerLinkActive="active"><a routerLink="auth">Authentification</a></li>
66
<li routerLinkActive="active"><a routerLink="appareils">Appareils</a></li>
77
<li routerLinkActive="active"><a routerLink="edit">Nouvel appareil</a></li>
8+
<li routerLinkActive="active"><a routerLink="users">Utilisateurs</a></li>
89
</ul>
910
<div class="navbar-right">
1011
<p>Vous êtes connecté depuis {{ secondes }} secondes !</p>

src/app/app.module.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { BrowserModule } from '@angular/platform-browser';
22
import { NgModule } from '@angular/core';
33
import { AppComponent } from './app.component';
44
import { AppareilComponent } from './appareil/appareil.component';
5-
import { FormsModule } from '@angular/forms';
5+
import { FormsModule, ReactiveFormsModule} from '@angular/forms';
66
import { AppareilService } from './services/appareil.service';
77
import { AuthComponent } from './auth/auth.component';
88
import { AppareilViewComponent } from './appareil-view/appareil-view.component';
@@ -12,11 +12,16 @@ import { SingleAppareilComponent } from './single-appareil/single-appareil.compo
1212
import { FourOhFourComponent } from './four-oh-four/four-oh-four.component';
1313
import { AuthGuard } from './services/auth-guard.service';
1414
import { EditAppareilComponent } from './edit-appareil/edit-appareil.component';
15+
import { UserService } from './services/user.service';
16+
import { UserListComponent } from './user-list/user-list.component';
17+
import { NewUserComponent } from './new-user/new-user.component';
1518

1619
const appRoutes: Routes = [
1720
{ path: 'appareils', canActivate: [AuthGuard], component: AppareilViewComponent },
1821
{ path: 'appareils/:id', canActivate: [AuthGuard], component: SingleAppareilComponent },
1922
{ path: 'edit', canActivate: [AuthGuard], component: EditAppareilComponent },
23+
{ path: 'users', /*canActivate: [AuthGuard],*/ component: UserListComponent },
24+
{ path: 'new-user', /*canActivate: [AuthGuard],*/ component: NewUserComponent },
2025
{ path: 'auth', component: AuthComponent },
2126
{ path: '', component: AuthComponent },
2227
{ path: 'not-found', component: FourOhFourComponent },
@@ -31,17 +36,21 @@ const appRoutes: Routes = [
3136
AppareilViewComponent,
3237
SingleAppareilComponent,
3338
FourOhFourComponent,
34-
EditAppareilComponent
39+
EditAppareilComponent,
40+
UserListComponent,
41+
NewUserComponent
3542
],
3643
imports: [
3744
BrowserModule,
3845
FormsModule,
46+
ReactiveFormsModule,
3947
RouterModule.forRoot(appRoutes)
4048
],
4149
providers: [
4250
AppareilService,
4351
AuthService,
44-
AuthGuard
52+
AuthGuard,
53+
UserService
4554
],
4655
bootstrap: [AppComponent]
4756
})

src/app/edit-appareil/edit-appareil.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<!-- form by template method -->
12
<div class="row">
23
<div class="col-sm-8 col-sm-offset-2">
34
<form (ngSubmit)="onSubmit(f)" #f="ngForm">

src/app/models/User.model.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export class User {
2+
constructor(
3+
public firstName: string,
4+
public lastName: string,
5+
public email: string,
6+
public drinkPreference: string,
7+
public hobbies?: string[]
8+
) {}
9+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<!-- form by reactive method -->
2+
<div class="col-sm-8 col-sm-offset-2">
3+
<form [formGroup]="userForm" (ngSubmit)="onSubmitForm()">
4+
<div class="form-group">
5+
<label for="firstName">Prénom</label>
6+
<input type="text" id="firstName" class="form-control" formControlName="firstName">
7+
</div>
8+
<div class="form-group">
9+
<label for="lastName">Nom</label>
10+
<input type="text" id="lastName" class="form-control" formControlName="lastName">
11+
</div>
12+
<div class="form-group">
13+
<label for="email">Adresse e-mail</label>
14+
<input type="text" id="email" class="form-control" formControlName="email">
15+
</div>
16+
<div class="form-group">
17+
<label for="drinkPreference">Quelle boisson préférez-vous ?</label>
18+
<select id="drinkPreference" class="form-control" formControlName="drinkPreference">
19+
<option value="jus d'orange">Jus d'orange</option>
20+
<option value="jus de mangue">Jus de mangue</option>
21+
</select>
22+
</div>
23+
<button type="submit" class="btn btn-primary">Soumettre</button>
24+
</form>
25+
</div>

src/app/new-user/new-user.component.scss

Whitespace-only changes.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { Component, OnInit } from '@angular/core';
2+
import {FormBuilder, FormGroup} from '@angular/forms';
3+
import {UserService} from '../services/user.service';
4+
import {Router} from '@angular/router';
5+
import {User} from '../models/User.model';
6+
7+
@Component({
8+
selector: 'app-new-user',
9+
templateUrl: './new-user.component.html',
10+
styleUrls: ['./new-user.component.scss']
11+
})
12+
export class NewUserComponent implements OnInit {
13+
14+
userForm: FormGroup;
15+
16+
constructor(private formBuilder: FormBuilder,
17+
private userService: UserService,
18+
private router: Router
19+
) { }
20+
21+
ngOnInit(): void {
22+
this.initForm();
23+
}
24+
25+
initForm() {
26+
this.userForm = this.formBuilder.group({
27+
firstName: '',
28+
lastName: '',
29+
email: '',
30+
drinkPreference: ''
31+
});
32+
}
33+
34+
onSubmitForm() {
35+
const formValue = this.userForm.value;
36+
const newUser = new User(
37+
formValue['firstName'],
38+
formValue['lastName'],
39+
formValue['email'],
40+
formValue['drinkPreference']
41+
);
42+
this.userService.addUser(newUser);
43+
this.router.navigate(['/users']);
44+
}
45+
}

src/app/services/user.service.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { User } from '../models/User.model';
2+
import { Subject } from 'rxjs/Subject';
3+
4+
export class UserService {
5+
6+
private users = [
7+
new User('Will', 'Alexander', 'will@will.com', 'jus d\'orange', ['coder', 'boire du café'])
8+
];
9+
10+
userSubject = new Subject<User[]>();
11+
12+
emitUsers() {
13+
this.userSubject.next(this.users.slice());
14+
}
15+
16+
addUser(user: User) {
17+
this.users.push(user);
18+
this.emitUsers();
19+
}
20+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<ul class="list-group">
2+
<li class="list-group-item" *ngFor="let user of users">
3+
<h3>{{ user.firstName }} {{ user.lastName }}</h3>
4+
<p>{{ user.email }}</p>
5+
<p>Cette persone préfère le {{ user.drinkPreference }}</p>
6+
<p *ngIf="user.hobbies && user.hobbies.length > 0">
7+
Cette personne a des hobbies !
8+
<span *ngFor="let hobby of user.hobbies">{{ hobby }} - </span>
9+
</p>
10+
</li>
11+
<a routerLink="/new-user">Nouvel utilisateur</a>
12+
</ul>

src/app/user-list/user-list.component.scss

Whitespace-only changes.

0 commit comments

Comments
 (0)