javascript - Angular abonnere skyv objekt til matrise
Jeg lager en Angular-applikasjon, og der jeg har et tomt array som,
users: any = [];
Deretter gjør jeg et servicekall i ngOnInit for å lagre dataene i users-arrayen slik,
ngOnInit() {
//Getting the data from json
this.httpClient.get('https://api.myjson.com/bins/n5p2m').subscribe((response: any) => {
console.log("response", response.data);
response.data.forEach(element => {
//Pusing the data to users array
this.users.push(element);
});
})
//Trying to get the complete array after push of the element from the service response data
console.log("users array", this.users);
//But it shows empty array
}
Men jeg klarer ikke å få dataene i console.log("users array", this.users); fordi servicekallet medfører en forsinkelse..
Hvordan skyve dataene inn i this.users, og når vi kaller utenfor tjenesten, bør det ha de utfylte dataene og ikke være tomt som nå..
Lagde også en funksjonell stackblitz angående det https://stackblitz.com/edit/angular-q3yphw
Vennligst se på konsollen som har nåværende resultat..
Gjeldende resultat i console.log("users array", this.users); er tom array [].
Så jeg forventer følgende resultat i console.log("users array", this.users); utenfor tjenesten og inne i ngOnInit,
[
{"id":1,"value":"User One"},
{"id":2,"value":"User Two"},
{"id":3,"value":"User Three"}
]
Siden jeg er ny i Angular, vennligst hjelp meg med å oppnå det forventede resultatet..
Svar #1
Had forket deg Stackblitz-demo
Hvis du vil manipulere dataene dine etter HTTP Client-responsen, kan du faktisk gjøre det ved å leke med RxJS-operatørene. Etter de metodene inne i pipen, når du abonnerer på den endelige verdien, vil den direkte bli rendret til malen din.
this.httpClient
.get('https://api.myjson.com/bins/n5p2m')
.pipe(
map(response => response.data),
tap(users => console.log("users array", users)) // users array [Object, Object, Object]
)
.subscribe(users => this.users = users);
Hvis du ikke vil bruke RxJS-operatørene, kan du fortsatt manipulere det etter at du har abonnert på den endelige verdien og utføre din manuelle datamanipulasjon
Det er ikke nødvendig å utføre .forEach() for å lagre arrayen av objekter fra response.data, siden Angular allerede har gjort det for deg. Så hver gang du tildeler det som
this.users=response.datadet vil lagre ditt array av objekter[Object, Object, Object]
this.httpClient
.get('https://api.myjson.com/bins/n5p2m')
.subscribe(response => this.users = response.data); // This will directly store your response data in an array of objects.
Svar #2
Du kan lagre data i en matrise uten løkke også.
ngOnInit() {
//Getting the data from json
this.httpClient.get('https://api.myjson.com/bins/n5p2m').subscribe((response: any) => {
this.users.push(...response.data)
console.log("users array", this.users);
})
}
