正如我在评论中提到的那样,我找到了一个将query
“ies”转移到服务或解析器的解决方案,但是“ies”仍然没有运气watchQuery
(但我也发现它们对于我的应用程序并不是真正必要的)。
下面我给你一些可能有用的片段。
我定义了负责在我的服务中执行查询的方法:
public allItems(): Observable<ApolloQueryResult<Object>> {
return this.apollo.query({
query: allItemsQuery
});
}
allItemsQuery
常量查询字符串在哪里:
export const allItemsQuery = gql`
query allItems {
items {
id
name
}
}
`;
比在我的解析器中,我只是allItems
从服务中调用该方法:
public resolve(route: ActivatedRouteSnapshot): Observable<ApolloQueryResult<Object>> | boolean {
return this.itemsService.allItems ? this.itemsService.allItems() : false;
}
并在我的组件中提取路由解析数据:
this.activatedRoute.data.subscribe(data: {items: Item[]}) => {
console.log(items)
}
当然,如果在路由配置解析器中调用名称items
如下:
{
path: 'items',
component: ItemsComponent,
resolve: {
items: ItemsResolve
}
}
如果您不想通过解析器使用查询,您当然可以从组件中调用所需的方法并订阅它们。也有可能订阅服务并返回普通对象/数组,Observable<ApolloQueryResult<T>>
但由于订阅/取消订阅,我认为提出的解决方案更方便。