Je suis nouveau dans l'angulaire et je rencontre des problèmes avec une liste déroulante dynamique des pays et des villes. Bien que j'ai vérifié beaucoup de réponses dans Stackoverflow, je ne suis pas en mesure d'obtenir une image claire sur la manière dont nous devrions réussir à obtenir les résultats souhaités.
countries: {};
states: {};
cities: {};
ngOnInit() {
this.getCountry()
}
<div class="form-group">
<select formControlName="country" class="form-control" (change)="onChangeCountry($event.target.value)">
<option value="">Select country...</option>
<option *ngFor="let country of countries" [value]="country.id">{{country?.name}}</option>
</select>
</div>
<div class="form-group">
<select formControlName="state" class="form-control"
(change)="onChangeState($event.target.value)">
<option value="">Select state...</option>
<option *ngFor="let state of states" [value]="state.id">{{state?.name}}</option>
</select>
</div>
<div class="form-group">
<select formControlName="city" class="form-control">
<option value="">Select city...</option>
<option *ngFor="let city of cities" [value]="city.id">{{city?.name}}</option>
</select>
</div>
getCountry(){
this._country.getCountries().subscribe((res: any) =>{
this.countries = res.data;
});
}
onChangeCountry(countryId: number) {
if (countryId) {
this._country.getStates(countryId).subscribe(
data => {
console.log(data)
this.states = data;
this.cities = null;
}
);
} else {
this.states = null;
this.cities = null;
}
}
onChangeState(stateId: number) {
if (stateId) {
this._country.getCities(stateId).subscribe(
data =>
this.cities = data
);
} else {
this.cities = null;
}
}
4 Réponses :
Vous pouvez essayer ceci pour l'init des variables, Remplacer tout avec quel type est chaque variable. p> p>
Dans l'image que vous avez ajoutée, vous pouvez voir que le message "états trouvés" est imprimé dans la console .. L'objet de réponse est donc identifié correctement. À l'intérieur de l'objet State Data Strong> est la matrice qui détient la liste des états .. Droite? Vous devez donc itération à travers <option *ngFor="let state of states.data" [value]="state.id">{{state?.name}}</option>
Vous attribuez à l'ensemble l'objet à la variable des états au lieu de la gamme d'états de cet objet. Modifiez les données attribuées aux états à ONCHANGECONTRY à partir de:
this.states = data.data;
Je ne pense pas que vous ayez vraiment besoin de message: «pays trouvés» parce que vous n'utilisez pas cela. Une meilleure idée est de retourner directement la gamme de pays par exemple si vous travaillez également sur le côté serveur également.
*ngFor="let country of country.data"
Les villes doivent être une liste
this.states = données; code> doit êtrececi.states = data.data; code> etthis.cities = données; code> devrait être.cités = data.data; code>"Données" de la propriété n'existe pas sur type - Obtenir cette erreur @sivakumartaDisetti
@ABID Mais dans les images que vous avez partagées a
Data CODE> propriété droite?Dans les deux souscriptions, pouvez-vous faire
console.log (données) code> et poster ici les images?@SivakumartaDisetti {Message: "States trouvés", Data: Array (7)} Données: Array (7) 0: {ID: 487, Nom: "Encamp", Country_ID: 6, Country_Code: "AD", FIPS_CODE: "03 ", ...}
@ABID Je pense que lorsque vous changez d'état, vous obtenez une réponse différente `Données: Array (7) 0: {ID: 487, Nom:" Encamp ", Country_ID: 6, Country_Code:" AD ", FIPS_CODE:" 03 ", ...} `alors
olfangestate code> Vous avez juste besointhis.cities = données code>Et pouvez-vous faire console.log (données) avant
ceci.cities = données code>@Sivakumartadisetti Si possible Pls Rejoignez Ceci est très en angulaire pour rejoindre la réunion vidéo, cliquez sur ce lien: .google.com / akc-udaa-qsy
J'ai ajouté Console.log (données) mais je reçois une erreur - «Les données de la propriété n'existent pas sur le type 'regiscomponent'.
@Abid pouvez-vous rejoindre l'appel
@SivakumartaDisetti Oui Pls
Rencontrez.google.com/akc-udaa-qsy