Как сделать резольвер Generi c в Angular (2+) - PullRequest
1 голос
/ 26 марта 2020

Я хочу создать в своем приложении супер универсальный c API Resolver. Я хочу, чтобы все запросы "GET", возможно, распространялись на другие глаголы в будущем, чтобы использовать этот преобразователь. Я хочу иметь возможность передать URL-адрес и глагол запроса в распознаватель, а затем обработать вызов функции оттуда.

Этот преобразователь будет использоваться в любом определении маршрута Angular с параметром, называемым «id», и я хочу иметь возможность указать тип возвращаемого значения для этого преобразователя.

Это концептуально то, что я хочу сделать, но, очевидно, это не работает из-за реализации интерфейса через Angular.

export class ApiResolve<T> implements Resolve<T> {
  constructor(private _httpClient: HttpClient) { }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot, requestUrl: string, requestVerb: 'get'): Observable<T> {
    return this._httpClient.request<T>(requestVerb, `${requestUrl}/${route.data['id']}`);
  }
}

{ path: `user/:id`, component: UserComponent, resolve: { user: ApiResolver<User>('api.com/users', 'get') } }

1 Ответ

1 голос
/ 26 марта 2020

Кажется, что единственный жизнеспособный способ передачи информации в распознаватель - это использовать объект данных маршрута:

export class ApiResolve<T> implements Resolve<T> {
  constructor(private _httpClient: HttpClient) { }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):  {
    const resolverData = route.data.resolverData;
    return this._httpClient.request<T>(resolverData.method, `${resolverData.url}/${route.data['id']}`);
  }
}

{ 
  path: `user/:id`, 
  component: UserComponent, 
  resolve: { user: ApiResolver<User> },
  data: { resolverData: {url: 'api.com/users', method: 'get'}}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...