Académique Documents
Professionnel Documents
Culture Documents
LETHRECH SupMTI
TP1 Angular
Objectifs du TP
1- Installer Node.js
If you are unsure what version of Node.js runs on your system, run node -v in a terminal
window.
1
Formation JEE Pr. M. LETHRECH SupMTI
2
Formation JEE Pr. M. LETHRECH SupMTI
"name": "smartphone",
"price": 3000,
"quantity": 5,
"selected": false,
"available": true
}
]
}
Sur le fichier package.json ajouter les modifications suivantes au niveau des scripts :
"start": "ng serve",
Par
"start": "concurrently \"ng serve\" \"json-server --watch db.json\"",
Ensuite démarrer le serveur via la commande :
Npm start
Tester l’URL : http://localhost:3000/products
http://localhost:3000/products/?id=1
http://localhost:3000/products/?name_like=p
Utilisation de « Advanced rest client » “ARC” de google pour ajouter des éléments :
3
Formation JEE Pr. M. LETHRECH SupMTI
Méthode post pour ajouter des éléments, put pour mettre à jour….
Installation de bootstrap/jquery :
Npm install –save bootstrap
Npm install –save jquery
Npm install –save font-awesome
4
Formation JEE Pr. M. LETHRECH SupMTI
nav-bar.component.html
5
Formation JEE Pr. M. LETHRECH SupMTI
ng g c components/home
Ajouter les routes sur le fichier : app-routing.module.ts
const routes: Routes = [
{path:"products", component:ProductsComponent},
{path:"", component:HomeComponent}
];
Sur le fichier nav-bar.component.html modifier les liens :
<li class="nav-item">
<a class="nav-link" routerLink="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="/products">Products</a>
</li>
@Injectable({providedIn:"root"})
export class ProductsService{
constructor(private http:HttpClient) {
}
getAllProducts():Observable<Product[]>{
let host = environment.host;
return this.http.get<Product[]>(host+"/products");
// return this.http.get("http://localhost:3000/products");
}
getSelectedProducts():Observable<Product[]>{
let host = environment.host;
return this.http.get<Product[]>(host+"/products?selected=true");
}
6
Formation JEE Pr. M. LETHRECH SupMTI
getAvailableProducts():Observable<Product[]>{
let host = environment.host;
return this.http.get<Product[]>(host+"/products?available=true");
}
}
@Component({
selector: 'app-products',
templateUrl: './products.component.html',
styleUrls: ['./products.component.css']
})
export class ProductsComponent implements OnInit {
products?:Product[];
// products:Product[]|null=null;
constructor(private service:ProductsService) { }
ngOnInit(): void {
}
onGetAllProducts() {
this.service.getAllProducts().subscribe(data=>{
this.products = data;
})
}
}
Sur le dossier app, créer un dossier model ensuite créer la classe Product
(product.model.ts) comme suit :
7
Formation JEE Pr. M. LETHRECH SupMTI
</li>
<li>
<button class="btn btn-outline-info m-lg-2">Selected</button>
</li>
<li>
<button class="btn btn-outline-info m-lg-2">Available</button>
</li>
</ul>
</nav>
</table>
</div>
8
Formation JEE Pr. M. LETHRECH SupMTI
</form>
</li>
</ul>
Au niveau du script product.component.ts ajouter :
onSearch(dataForms : any){
this.products$ =
this.service.searchProducts(dataForms.keyword).pipe(
map(data=>({dataState:DataStateEnum.LOADED,data:data})),
startWith({dataState:DataStateEnum.LOADING}),
catchError(err=>of({dataState:DataStateEnum.ERROR,
errorMessage:err.message}))
);
}
Avec la création de l’objet product.stat.ts :
9
Formation JEE Pr. M. LETHRECH SupMTI
ERROR
}
searchProducts(keyword:string):Observable<Product[]>{
let host = environment.host;
return
this.http.get<Product[]>(host+"/products?name_like="+keyword);
}
<td>
<button (click)="onSelect(p)" [ngClass]="p.selected?'btn-
success':'btn-danger'" class="btn btn-sm">
<span *ngIf="p.selected">Unselected</span>
<span *ngIf="!p.selected">Selected</span>
</button>
</td>
<td>
<button (click)="onDelete(p)" class="btn btn-sm btn-danger"
>
<span class="fa-trash-o" ></span>
</button>
</td>
onSelect(p:Product){
this.service.select(p).subscribe(data=>{
p.selected = data.selected;
})
}
onDelete(p:Product){
let v = confirm("etes vous sure")
if(v==true)
this.service.delete(p).subscribe(data=>{
10
Formation JEE Pr. M. LETHRECH SupMTI
this.onGetAllProducts();
})
}
select(product:Product):Observable<Product>{
let host = environment.host;
product.selected = !product.selected;
return
this.http.put<Product>(host+"/products/"+product.id,product);
}
delete(product:Product):Observable<void>{
let host = environment.host;
return this.http.delete<void>(host+"/products/"+product.id);
}
Réactive forms
Création d’un formulaire : ng g c components/product-add
Ajout d’un nouveau bouton : sur products.component.html
<li>
<button (click)="onNewProduct()" class="btn btn-sm btn-outline-
info m-lg-2">New Product</button>
</li>
IntelliSense
Pour ajouter la completion css a visual studio code ajouter l’extension Zignd
11
Formation JEE Pr. M. LETHRECH SupMTI
Déploiement de l’application :
Modifier le fichier index.jsp
La ligne
<base href="/">
Par
<base href="./">
12
Formation JEE Pr. M. LETHRECH SupMTI
Sources
Des radars
https://www.thoughtworks.com/radar
https://www.infoq.com/
https://qconlondon.com/
Transaction manager
Security
Structuration de la BD
13