Как отправить запрос GET HTTP-клиенту для получения данных на основе параметра? - PullRequest
1 голос
/ 25 июня 2019

В моем приложении Angular я могу отправить HTTP-запрос GET на JSON-сервер и получить данные из файла JSON.

Вот код из моего JobService на данный момент:

getJob(id: number): Observable<IJob> {
    return this.httpClient.get<IJob>(`${this.baseUrl}/${id}`)
        .pipe(catchError(this.handleError));
}

getJobs(): Observable<IJob[]> {
    return this.httpClient.get<IJob[]>(this.baseUrl)
        .pipe(catchError(this.handleError));
}

А вот интерфейс IJob:

export interface IJob {
    id: number;
    title: string;
    description: string;
    employeeId?: number;
    managerId: string;
}

Вот мой component код, который вызывает вышеуказанные методы:

loadExistingJobs() {
    this._jobService.getJobs().subscribe(
        (listJobs) => {
            this.jobs = listJobs;
        },
        (err) => console.log(err)
    );
}

getJob(id: number) {
    this._jobService.getJob(id).subscribe(
        (job: IJob) => {
            this.editJob(job);
            this.job = job;
        },
        (err) => console.log(err)
    );
}

Используя приведенный выше код, я могу получить все существующие вакансии и конкретную работу, основываясь на идентификаторе вакансии.

Теперь мне нужно выяснить, как получить все задания на основе managerId. То есть Я хочу отображать только те задания, где ManagerId = 1.

Может кто-нибудь сказать мне, что нужно сделать, чтобы сделать это?

Нужно ли отправлять другой запрос GET с параметром ManagerId или я фильтрую данные, возвращенные с getJobs?

Ответы [ 3 ]

2 голосов
/ 25 июня 2019

Эта проблема зависит от вашего REST API и вашего дизайна

Если вы можете добавить новый REST API, рекомендуется добавить новую службу REST, которая возвращает «Задания» на основе «ManagerID» (оптимизированное решение)

Если нет, вы можете отфильтровать возвращенный список по:

loadExistingJobsByManagerId(managerId: string) {
    this._jobService.getJobs().subscribe(
        (listJobs) => {
            this.jobs = listJobs;
            this.filtered = listJobs.filter(job => job.managerId === managerId);
        },
        (err) => console.log(err)
    );
}
2 голосов
/ 25 июня 2019

Если вам нужно реализовать отдельный API для получения заданий на основе managerId , вам также нужно изменить свой Backend API.Но это может быть достигнуто просто следующим образом.фильтровать данные, полученные из getJobs вызова API на основе managerId .

filteredJobs: any;
managerId: string = "1";

    loadExistingJobs() {
        this._jobService.getJobs().subscribe(
            (listJobs) => {
                this.jobs = listJobs;
                this.filteredJobs = this.jobs.filter(job => job.managerId === this.managerId);
            },
            (err) => console.log(err)
        );
    }
1 голос
/ 25 июня 2019

Я считаю, что это больше связано с API, которые вы используете и существует. Здесь вы можете сделать либо:

  1. вызовите другой API (если он существует), который примет «ManagerID» и вернуть все задания на основе идентификатора менеджера.
  2. В противном случае вы можете фильтровать данные из API getJobs (ЕСЛИ пункт 1 API не существует).

Надеюсь, это поможет вам понять. Также вы можете спросить вашего разработчика API этого проекта о предложенном выше API (п. 1).

...