角度分辨功能取决于其他旋转变压器

时间:2018-04-27 12:42:50

标签: angular angular5

在角度应用程序中,甚至在我加载主页之前,我想从后台获取数据。但是在我从后端获取数据之前,我需要向用户发送国家名称。

所以,现在数据通话取决于第一个解析器调用。在这种情况下如何处理?

这是我的代码:

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'.

2 个答案:

答案 0 :(得分:1)

您可以使用async and await

中显示的this plunkr

例如,您将拥有一个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)
          ));
       }
}