Лучше, если ваша Служба не будет иметь состояния, это снизит сложность вашего приложения и избавит вас от некоторых проблем и отладки, и в этом просто нет необходимости, потому что вы всегда можете получить item1Id и item2Id из вашего активированного маршрута, поэтому позвольте активированному маршруту удерживать состояние вашего приложения (в этом случае состояние - это то, что выбраны Item1Id и Item2Id) и создайте службу без отслеживания состояния, которую вы можете вызывать из любого места и которая содержит логика вашего Item API.
Вот как я представляю себе ваш сервис (имейте в виду, что это всего лишь пример, который нужно принять во внимание, поскольку я точно не знаю вашу семантику и варианты использования)
ItemService
export class ItemService {
constructor(private http: HttpClient) {}
getList(item1Id: string, item2Id: string) {
/* Call to Get List endpoint with Item1Id and Item2Id */
}
getDetails(item1: string, item2: string, item3: string) {
/* Call to Get Details endpoint with Item1Id and Item2Id and Item3Id */
}
}
Затем вы можете использовать эту службу везде, если у вас есть доступ к ActivatedRouteSnapshot или ActivatedRoute.
Пример использования в Resolver для маршрута item1 /: item1Id / item2 /: item2Id
export class ItemResolver implements Resolve<any> {
constructor(private itemService: ItemService) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<any> {
return this.itemService.getList(route.params['item1Id'], route.params['item2Id']);
}
}
Пример использования в компоненте для маршрута item1 /: item1Id / item2 /: item2Id для получения сведений об элементе 3
export class HelloComponent {
constructor(private route: ActivatedRoute, private itemService: ItemService) {}
getDetails(item3Id) {
this.route.params.pipe(
take(1),
map(({ item1Id, item2Id }) => {
console.log(this.itemService.getDetails(item1Id, item2Id, item3Id))
})
).subscribe();
}
}
Вот рабочий StackBlitz, демонстрирующий это: https://stackblitz.com/edit/angular-ivy-h4nszy
Вам следует редко использовать службы с отслеживанием состояния (если это действительно не нужно, и даже в этом случае я рекомендую использовать что-то вроде библиотеки ngrx для управления своим состоянием) с информацией, которую вы предоставили, хотя вам действительно не нужно чтобы передавать параметры конструктору вашей службы, вы должны оставить его без состояния и передать параметры своим методам.
person
h0ss
schedule
11.08.2020