0
votes

États et ville non peuplées dans la liste déroulante

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;
  }
}


13 commentaires

Les villes doivent être une liste


this.states = données; doit être ceci.states = data.data; et this.cities = données; devrait être .cités = data.data;


"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 propriété droite?


Dans les deux souscriptions, pouvez-vous faire console.log (données) 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 Vous avez juste besoin this.cities = données


Et pouvez-vous faire console.log (données) avant ceci.cities = données


@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


4 Réponses :


1
votes

Vous pouvez essayer ceci pour l'init des variables, xxx

Remplacer tout avec quel type est chaque variable.


0 commentaires

1
votes

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 états.data ​​strong> au lieu des États. Appliquer des modifications similaires dans villes forte> et pays forts> aussi ..

<option *ngFor="let state of states.data" [value]="state.id">{{state?.name}}</option>


0 commentaires

0
votes

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;


0 commentaires

0
votes

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"


0 commentaires