angular - Kan inte hämta data på grund av "Värdet nedan utvärderades just nu"


Tja, jag har ägnat mycket tid åt att leta efter hjälp för detta problem men ingenting fungerade för mig. Jag får en array av objekt från min leverantör:

this.encarteProvider.getProdutosEncarte('encarte1').subscribe(prods => {
    this.produtos = prods;
    console.log(this.produtos);
});

I konsolen visas:

[]
0: Produto
1: Produto
2: Produto
length: 3
__proto__: Array(0)

Om jag försöker this.produtos.forEach(produto => ...) visas ingenting för mig, eftersom arrayen är tom. Jag tror att det är för att datan hämtas asynkront och (som Chromes konsol säger när jag klickar på i-ikonen) "värdet utvärderades just nu", men varför kan jag visa det i HTML med ngFor men kan inte få datan inne i .ts-filen?

Svar #1

Det är bara en tidsfråga. När sidan först visas finns inte datan där, så ngFor gör ingenting. Senare, när datan kommer, upptäcker Angulars förändringsdetektion att datan nu är tillgänglig och uppdaterar ... återkör ngFor och det fungerar.

Du visar inte var forEach körs i koden ... men min gissning är att det är innan datan hämtas. Det är därför den är tom.

Försök flytta den koden till inom subscribe.

this.encarteProvider.getProdutosEncarte('encarte1').subscribe(prods => {
    this.produtos = prods;
    console.log(this.produtos);
    this.produtos.forEach(produto => ...);
});

På så sätt kommer inte koden att köras förrän efter att datan hämtats.

Jag försökte det i min kod på detta sätt:

ngOnInit(): void {
    this._productService.getProducts()
            .subscribe(products => {
                this.products = products;
                this.products.forEach(product => console.log(JSON.stringify(product)));
            },
                error => this.errorMessage = <any>error);
}

Svar #2

Jag har åtgärdat det genom att tilldela objektet igen efter prenumerationen, det vill säga

this.prodoctous=this.prodoctous.splice(0,this.prodoctous.length)

Relaterade artiklar