在角度应用程序中,甚至在我加载主页之前,我想从后台获取数据。但是在我从后端获取数据之前,我需要向用户发送国家名称。
所以,现在数据通话取决于第一个解析器调用。在这种情况下如何处理?
这是我的代码:
import { Routes} from '@angular/router';
import { HomeComponent } from '../pages/home/home.component';
import { ResolveService } from '../shared/service/resolve.service';
import { ResolveCountryService } from '../shared/service/resolve-country.service';
export const AppRoutes:Routes = [
{path:"", component: HomeComponent, resolve:{ country : ResolveCountryService, data:ResolveService} }
]
此处ResolveCountryService
必须将国家/地区名称分享给ResolveService
,那么管理此问题的正确方法是什么?
更新
如果我喜欢这样:
export const AppRoutes:Routes = [
{path:"", component: HomeComponent, resolve:{ country : ResolveCountryService, resolve : {data:ResolveService } } }
]
我收到错误信息:
src/app/shared/service/resolve-country.service"' has no exported member 'ResolveCountryService'.
答案 0 :(得分:1)
您可以使用async
and await
例如,您将拥有一个async
方法,该方法将返回具有所需结果的承诺(这将是您在执行任何其他操作之前要等待的第一个调用)。
然后,您可以使用其他async
方法和await
方法调用它。
(如果需要,你可以在try/catch
等待它。)
在您的情况下,ResolveCountryService
将等待检索用户所在国家/地区的方法。
注意:await
仅适用于promises,但您可以使用async
方法解析一个observable,该方法将承诺返回await
。
答案 1 :(得分:0)
你应该使用flatMap
export class YourDataResolver implements Resolve<object> {
constructor(private dataService: DataService, private countryService: CountryService) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<YourDataType> {
return this.countryService.getCountry().flatMap( country=>
return this.dataService.findByCountry(country)
));
}
}