Это клиент 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);
});