Могу ли я иметь два отдельных вызова API в одном файле распознавателя? (Angular 9) - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть этот маршрут:

{
    path: ':c/:u/listview/:site',
    component: SiteslistComponent,
    resolve: {
        apiData: ApiResolver
    }
}

И у меня есть этот файл распознавателя:

import { Injectable } from '@angular/core';
import { Resolve, ActivatedRoute } from '@angular/router';
import { ApiService } from './api.service';

@Injectable()
export class ApiResolver implements Resolve<any> {

    public _customer;
    public _userId;

    constructor(
        private apiService:ApiService,
        private route:ActivatedRoute
    ) {
        let hash = window.location.hash;
        let params = hash.split('/');
        this._customer = params[1]; 
        this._userId = params[2];// <<< USE THIS WHEN DEPLOYING TO PRODUCTION
    }

    resolve() {
        if (isNaN(this._userId)) {
            this._userId = 14152;
        }
        return this.apiService.getSites(this._customer, this._userId);
    }


}

Мне нужно добавить новый маршрут в мое приложение, в котором также используется распознаватель.

{
    path: ':c/:u/siteoverview/:siteid/overview',
    component: SiteOverviewComponent,
    resolve: {
        apiData2: ApiResolver
    }
}

Но я в замешательстве. Могу ли я использовать тот же файл распознавателя и как-нибудь добавить вторую функцию разрешения? Или мне нужен отдельный файл распознавателя для каждой функции разрешения, которую нужно создать?

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете использовать опцию data в конфигурации вашего маршрута, чтобы отправить что-то в функцию разрешения. Далее это будет использоваться для различения guish между вызовами API.

{
    path: ':c/:u/siteoverview/:siteid/overview',
    component: SiteOverviewComponent,
    resolve: {
        apiData2: ApiResolver
    },
    data: {
      resolveMethod: 'getSites'
    }
},
{
    path: ':c/:u/siteoverview/:siteid/overview',
    component: SiteOverviewComponent,
    resolve: {
        apiData2: ApiResolver
    },
    data: {
      resolveMethod: 'getUsers'
    }
}

resolver.ts

@Injectable()
export class ApiResolver implements Resolve<any> {
  ...
  resolve(route: ActivatedRouteSnapshot) {
    const method = route.data['resolveMethod'];
    return this[method]();
  }

  getSites() {
    if (isNaN(this._userId)) {
        this._userId = 14152;
    }
    return this.apiService.getSites(this._customer, this._userId);
  }

  getUsers() {
    ...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...