Должен ли я использовать наблюдаемые снова после того, как я запишусь на них? - PullRequest
0 голосов
/ 28 февраля 2020

Я новичок в angular, я работаю с другим разработчиком, который также является новичком, и мы обсуждаем, должны ли мы использовать наблюдаемые или нет.

searchResourcesBasic(queryResources: IQueryResourceEntityResource){
    let params = new HttpParams();
    params = params.append("resourceTypeId", queryResources.resourceTypeId.toString())
    return this.http.get<ISearchResourceEntityResource[]> 
   (this._constructFullAPIUrl(`search/Resources`), 
   { params });
}

searchProjectsBasic(projectResourceBasicSearch: IProjectResourceBasicSearch) {
    const params = new HttpParams();
    params.set('id', projectResourceBasicSearch.id.toString());
    params.set('projectNum', projectResourceBasicSearch.projectNum);
    params.set('projectName', projectResourceBasicSearch.projectName);
    return this.http.get<IProjectResourceBasicSearch>(this._constructFullAPIUrl(`search/projects`), { 
    params });
}

Так что в соответствующем Компоненты, на которые мы подписываемся и получаем нужные нам данные, и нам нужно перенести их в другой компонент, который не имеет с ним никакого отношения (это не родительский или дочерний компонент).

Итак, мы искали решение в Google и мы обнаружили, что можем создать сервис для передачи данных

export class TransfereService {

    private libraryData: ISearchLibraryItemResource[];
    private resourceBasicData: ISearchResourceEntityResource[];
    private currentSearchResults = new Observable<IProjectResourceBasicSearch>();

    setLibraryData(data) {
        localStorage.setItem("libraryItemsData", JSON.stringify(data));
        this.libraryData = data;
    }

    getLibraryData() {
        return this.libraryData;
    }

    //////////this is mine without observable/////////////
    setResourceBasicData(data) {
        localStorage.setItem("resourceBasicData", JSON.stringify(data));
        this.resourceBasicData = data;
    }

    getResourceBasicData() {
        return this.resourceBasicData;
    }

    //////////// This is his method with an observable/////////////////
    setSearchResults(newSearchResults: Observable<IProjectResourceBasicSearch>) {
        this.currentSearchResults = newSearchResults;
    }

    getSearchResults() {
        return this.currentSearchResults;
    }

}

По сути, у нас есть форма, при отправке мы вызываем API, получаем ответ, и мы должны отобразить его в другом представлении, я не не вижу смысла в использовании наблюдаемых снова при передаче данных между представлениями / компонентами.

///////////////////////////// ///////////////////////////////////////////////// Редактировать ////////////////////////////////////////////////// ///////////////////////// Основываясь на комментариях ниже, я должен добавить, что представление результатов может быть доступно в любое время, когда пользователь хочет, а не только когда он делает поиск и заполняет форму.

Разница в том, что если пользователь не выполнил поиск, представление результатов должно быть пустым.

Вот почему я вызываю API в представлении поиска, или представление с формой, как я ее называл выше.

И представление результатов должно иметь возможность обрабатывать несколько результатов, приложение имеет несколько представлений формы / поиска.

-Поиск service : вызов API с наблюдаемым (первый пример кода выше)

-Transfere service : получение данных из представления поиска для сохранения их в переменной и передачи это к представлению результатов (это та часть, в которой другой программист хочет добавить наблюдаемое).

-Поиск / представление формы : Форма заполнена -> добавить в службу, вызывающую API -> передать данные в службу передачи -> перенаправить в представление результатов

-просмотр результатов : поиск данных каждый раз, когда они открываются в ngOnInit, и, если они есть, он их отображает ( это где о программист подписывается на сервис передачи).

Данные не могут быть изменены или не должны быть изменены где-либо, если пользователь не выполняет новый поиск, но в этом сценарии я заменяю его в своем сервисе передачи. И у меня есть несколько переменных там для нескольких форм, которые приложение имеет

1 Ответ

1 голос
/ 28 февраля 2020

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

...