Je suis très nouveau à Angular2/4 et en essayant peu de choses.Formulaires réactifs avec plusieurs Dropdowns
Je suis en train d'utiliser formes réactives dans Angular4 et je suis en train d'obtenir 3 listes déroulantes pour afficher les données comme ci-dessous: -
Je veux concevoir une barre de filtre, qui permettra à un utilisateur de filtrer les éléments basé sur les options disponibles.
Il y a 3 éléments ici,
- clients (DropDown1)
- Sites (DropDown2)
- actifs (DropDown3)
Les clients ont NOMBREUX SITES, Les sites ont ATOUTS beaucoup.
Scénarios
Scénario 1 - Lorsque l'utilisateur clique sur le client 1, il doit voir tous les sites et les actifs disponibles dans le menu déroulant
Scénario 2 - Quand ils utilisateur clique sur les sites 1 sous client 1, il devrait uniquement les actifs dans ce site
Scénario 3 - est le même que 2, l'utilisateur clique sur le site 2 sous client 2, il devrait voir les actifs que sous ce site
Scénario 4 - C'est pareil comme 1, 2, 3, juste un client différent est cliqué.
données JSON est comme ci-dessous: -
import { User } from './models/user';
export const DATA: User[] =
[
{
"id": 1,
"name": "Customer 1",
"sites": [
{"id": 2, "name": "Site 1", "assets": [{"id": 3, "name": "Asset 1"}] },
{"id": 4, "name": "Site 2", "assets": [{"id": 5, "name": "Asset 2"}] },
{"id": 6, "name": "Site 3", "assets": [{"id": 7, "name": "Asset 3"}] }
]
},
{
"id": 8,
"name": "Customer 2",
"sites": [
{"id": 9, "name": "Site 4", "assets": [{"id": 10, "name": "Asset 4"}] },
{"id": 11, "name": "Site 5", "assets": [{"id": 12, "name": "Asset 5"}] },
{"id": 13, "name": "Site 6", "assets": [{"id": 14, "name": "Asset 6"}] }
]
},
{
"id": 15,
"name": "Customer 3",
"sites": [
{"id": 16, "name": "Site 7", "assets": [{"id": 17, "name": "Asset 7"}] },
{"id": 18, "name": "Site 8", "assets": [{"id": 19, "name": "Asset 8"}] },
{"id": 20, "name": "Site 9", "assets": [{"id": 21, "name": "Asset 9"}] }
]
}
]
est comme ci-dessous: -
import { Injectable } from '@angular/core';
import { User } from './models/user';
import { DATA } from './mock-data';
@Injectable()
export class UserService {
getData(): Promise<User[]> {
return Promise.resolve(DATA);
}
}
HTML est comme ci-dessous: -
<div class="container">
<div class="row">
<h1>Customer Details</h1><br>
<form [formGroup]="myForm" novalidate>
<div class="col-md-4" id="firstname">
<select id="customernames" formControlName="customernames">
<option *ngFor="let d of data">
{{d.name}}
</option>
</select>
</div>
<div class="col-md-4" id="firstname">
<select id="sites" formControlName="sites">
<option *ngFor="let d of data">
{{d.name}}
</option>
</select>
</div>
<div class="col-md-4" id="firstname">
<select id="assets" formControlName="assets">
<option *ngFor="let d of data">
{{d.name}}
</option>
</select>
</div>
</form>
</div>
</div>
Component est comme ci-dessous: -
import { Component, OnInit } from '@angular/core';
import { HttpClient, HttpResponse, HttpErrorResponse, HttpHeaders, HttpParams, HttpRequest, HttpEventType } from '@angular/common/http';
import { FormGroup, FormControl, Validators } from '@angular/forms';
import { User } from './models/user';
import { UserService } from './app.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{
data: User[];
myForm: FormGroup;
constructor(private userService: UserService) {
}
getData(): void {
this.userService.getData().then(response => this.data = response);
}
ngOnInit(): void {
this.getData();
this.myForm = new FormGroup({
customernames: new FormControl('', Validators.required),
sites: new FormControl('', Validators.required),
assets: new FormControl('', Validators.required)
})
}
}
Je crée sous forme réactive suivante comme lien ci-dessous: -
https://angular.io/guide/reactive-forms
Aussi j'ai regardé dans les formes dynamiques ci-dessous, mais ils me confondre: -
https://angular.io/guide/dynamic-form
Questions: -
- Comment puis-je placer des données dans les listes déroulantes (je ne ai pu le faire pour le client noms)
- Devrais-je utiliser l'approche Formulaire Dynamique et comment?
Comment puis-je obtenir la sélection d'un scénario comme: -
Customer1 (sélectionné en 1ère Dropdown) ---> Sites (2ème menu déroulant a des sites liés à Cutomer1) ---> Actif (Actif au par Sites)
Toute aide/conseils seraient appréciés.