angular - Istället för ngOnInit i app.component, var ska man placera API-anropet som gör att systemet väntar tills svaret returneras och injiceras i kroppen?
Jag är ny inom Angular och provar olika saker. Nyligen stötte jag på ett problem som kräver att jag vidtar vissa åtgärder baserat på resultaten som returneras av k, men innan något laddas i applikationen.
Just nu anropar jag en webapi i koden i app.component.ts, och baserat på det döljer jag innehållet på webbplatsen, men nyligen märkte jag en långsam respons från servern som orsakade en långsam respons från webapi, vilket gör att de åtgärder som behövde vidtas försenas och därför inte döljs innehållet.
Nu, istället för app.component där jag anropar API:et som returnerar ett löfte och sedan injicerar resultatet i css för body, behöver jag lägga API-anropet någonstans tills resultatet är returnerat; systemet bör inte fortsätta innan dess.
uppdatering :
ngOninit() i app.component har vi kallat ett API som i princip returnerar true/false. Baserat på det injiceras en klass med namnet 'type' i document.body, det vill säga IsVisible. Och i Sass för app.component inaktiverar det logotyperna och annat innehåll på webbsidan.
API-anrop
const res= app.services.getIsActiveType().toPromise();
document.body.ClassList.Add(res.type);
i sass
body {
&.Type{
logos {
dispaly: none;
}
}
}
Svar #1
Om du letar efter initiering innan något visas, behöver du APP_INITIALIZER
En DI-token som du kan använda för att tillhandahålla en eller flera initialiseringsfunktioner.
De angivna funktionerna injiceras vid applikationens uppstart och körs under appens initialisering. Om någon av dessa funktioner returnerar ett Promise eller en Observable, slutförs inte initialiseringen förrän Promisen är uppfylld eller Observablen är slutförd.
Du kan till exempel skapa en fabrikfunktion som laddar språkdata eller en extern konfiguration, och tillhandahålla den funktionen till APP_INITIALIZER-token. Funktionen körs under applikationens uppstartsprocess, och de nödvändiga uppgifterna är tillgängliga vid start.
Svar #2
att använda canLoad eller canActive-egenskapen hos routern kan hjälpa dig.