2017-05-17 5 views
0

Ich habe einen Web-Service-get Reihe von Ländern und innerhalb der einzelnen Länder Dienstleistungen, so will ich wählen Sie die Option make Benutzer in der Lage zu wählen Land oder Service
Wählen Elternteil mit Kind Winkel 4 Optionen Array innerhalb Array

ich tun möchte, zu Sie möchten diese

enter image description here

<select [(ngModel)]="countries" (ngModelChange)="onChange($event)" > 
     <option *ngFor="let c of countries" [ngValue]="c">{{c.nom}} </option> 
      <option *ngFor="let service of services" [ngValue]="service"> &nbsp; {{service.nom}} </option> 
</select> 

aus dem Web-Service i wie diese [Länder] erhalten und in console.log, wenn ich in Ländern klicken i erhalten Liste der Länder und innen Liste der Dienste

Die Datenstruktur wie folgt aussehen enter image description here

mit diesem Code erhalten i Länder und letzte Dienste :(, ich glaube, ich zwei müssen für da Array innerhalb Array, aber ich weiß nicht, wie zu tun es, so kann jemand mir helfen, dieses Problem zu beheben und dank

+0

Sie 'optgroup' dies zu erreichen, verwendet werden soll, das heißt:' < optgroup * ngFor = "let c von Ländern" [ngValue] = "c"> {{c.nom}}> ... ... '... Btw, wie geht es dir? Datenstruktur? Ich frage, weil es mehr Sinn macht, wenn Ihre * Dienste * durch * Länder * gruppiert sind .. aber es scheint nicht so zu sein. – developer033

+0

danke @ developer033 Sie helfen, eine Idee zu haben, aber können auf diese Frage antworten, oder Sie wollen Datenstruktur? – Akram

+0

Können Sie zuerst Ihre Datenstruktur einbeziehen? – developer033

Antwort

1

Um zu erreichen, was Sie wollen, sollten Sie optgroup verwenden.

Ex:

<optgroup *ngFor="let obj of arr" [label]="obj.PROP"> 
    <option *ngFor="let nestedObj of obj.nestedArray">{{nestedObj.PROP}}</option> 
</optgroup> 

In Ihrem Fall wäre es wie folgt:

<optgroup *ngFor="let c of countries" [label]="c.nom"> 
    <option *ngFor="let service of c.services" [ngValue]="service">{{service.nom}}</option> 
</optgroup> 

DEMO

-1

Versuchen sie Ihr Land und Dienstleistungen in ein neues Array zur Karte:

this.countryServices = []; 

let data = [ 
    {country: 'Spain', services: ['spainSservice1', 'spainService2']}, 
    {country: 'Canada', services: ['canadaservice1', 'canadaservice2']}, 
]; 

data.map(country => { 
    this.countryServices.push(country.country); 
    country.services.map(service => { 
    this.countryServices.push(service); 
    }) 
}); 

und dann in der Vorlage folgt aus:

<select> 
    <option *ngFor="let cs of countryServices" [ngValue]="cs">{{cs}}</option> 
</select> 

Ich hoffe, das hilft Ihnen.