Клиентский запрос Apollo для одного компонента вызывает WatchQuery для другого - как это остановить? - PullRequest
0 голосов
/ 18 июня 2019

Это клиент Angular Apollo, но я сомневаюсь, что это важно.

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

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

Конечно, запросы не имеют одно и то же имя.

Проблема в том, что модальное окно watchQuery вызывает повторный запуск watchQuery компонента списка, и я не хочу ненужного попадания на сервер. (Он не вызывает функцию Angular для этого watchQuery. Это не проблема Angular. Я проверял это.)

Если я использую apollo.query для компонента list, то никакого дополнительного попадания на сервер не происходит. Тем не менее, я хочу использовать watchQuery для списка, но без этого побочного эффекта. (apollo.query для модального окна не имеет значения.)

fetchPolicy: «только для сети» в модальном запросе кажется бесполезным.

Запрос компонента списка:

this.apollo
     .watchQuery({
        query: getAllMembers,
      })
      .valueChanges
      .pipe(
          tap(returnedData => {
            ... does some stuff to one of the returned properties...
          })
        )
      .subscribe(result => {
          this.dataSource.data = result.data['getMembers'];
          console.log('errors in getAllRecords', result.errors)
        });

Запрос модального окна:

this.apollo
      .watchQuery({   // This watchQuery is somehow calling the list's 
            // watchQuery.  There is no code anywhere that does that and         
            // there were no problems with the original REST code.  This is 
            // a GraphQL thing.
        fetchPolicy: 'network-only',
        query: getMemberByID,
        variables: {
          member_id: member_id,
        },
      })
      .valueChanges
      .subscribe(result => {
          let data = result.data['getMember'];
          this.addData(data, skillNames);  // Call function below to populate modal.
          console.log('errors in view-member', result.errors);
        });
...