Angular2 - 如何为路径设置多个解析器(一个接一个)

时间:2017-04-19 05:59:46

标签: angular angular2-routing

我有一个组件,我为此编写了一个解析器。

这是我想要在解析器中做的事情 -

  1. 首先获取所有活跃的国家/地区。
  2. 然后获取其中一个国家/地区的州(我将获得所选国家/地区的ID)。
  3. 在服务器上我编写了RESTful API - 获取国家/地区的网址为 - http://localhost:3000/api/v1/country/search?query={%22isActive%22:true}

    获取某个国家/地区的状态的网址是 - http://localhost:3000/api/v1/country/1/state/search?query={%22isActive%22:true}

    以下是我为它编写解析器的方法 -

    常规的设置 - resolver.service.ts

    @Injectable()
    export class GeneralSettingsResolverService implements Resolve<any> {
    constructor(private service: GeneralSettingsService) { }
    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<any> {
        return this.service.getAllActiveCountries().then(countries => {
            this.service.getActiveStatesOfCountry(7).then(states => {
                return {
                    everything: {
                        countries: countries,
                        states: states
                    }
                }
            })
        });
    }
    

    }

    general-settings.component.ts

    this.route.data.subscribe((data : {everything: any}) => {
            console.log(data) //<---- Here data.everything is printed as undefined.
    
        })
    

    常规的设置 - routing.module.ts

    let generalSettingsRoutes: Routes = [
    {
        path: '',
        component: GeneralSettingsComponent,
        data: {
            pageTitle: 'Organization Settings'
        },
        resolve: {
            everything: GeneralSettingsResolverService,
        }
    }];
    

    我知道我可以使用多个resolve来执行此操作。但是我可以使用一个单独的方法来完成这项工作,其中我一个接一个地获取数据。

1 个答案:

答案 0 :(得分:0)

我对路线解析器了解不多,但我认为你错过了return中的general-settings-resolver.service.ts声明。应该是这样的:

return this.service.getActiveStatesOfCountry(7).then(...)

或者只是从该调用周围移除花括号。否则你的“所有”对象就会在虚空中丢失: - )