带 Angular 的 ApolloClient
Posted
技术标签:
【中文标题】带 Angular 的 ApolloClient【英文标题】:ApolloClient with Angular 【发布时间】:2018-09-15 09:57:45 【问题描述】:我正在尝试执行 graphql 查询,但客户端出现网络错误。如果我在 chrome 中检查我的网络层,结果是正确的。但在我的角度组件中没有。
我的查询:
export const GetAllCorpoQuery = gql`
query getAllCorpo($status: Boolean)
getAllCorpo(status: $status)
id
`;
我的组件方法:
filter()
const nome, status = this.entity
const variables =
status
;
this.apollo.query<any>(query: GetAllCorpoQuery, variables, fetchPolicy: 'network-only').subscribe((data) =>
console.log(data);
this.corpos = data.getAllCorpo;
const nome = new MapColunaAtributo(this.colunas[0], 'nome');
const status = new MapColunaAtributo(this.colunas[1], 'status');
this.listPesquisa = [nome, status];
);
我的网络层:
The error:
ERROR Error: Uncaught (in promise): Error: Network error: Error writing result to store for query:
query getAllCorpo($status: Boolean)
getAllCorpo(status: $status)
id
__typename
Cannot read property 'getAllCorpo' of undefined
Error: Network error: Error writing result to store for query:
query getAllCorpo($status: Boolean)
getAllCorpo(status: $status)
id
__typename
有人可以帮我吗? 我正在使用 Angular 4.3.0 和
“阿波罗角”:“^1.0.1”,
"apollo-angular-link-http": "^1.0.2",
"apollo-cache-inmemory": "^1.1.12",
“阿波罗客户端”:“^2.2.8”
【问题讨论】:
您在使用 console.log(data) 时看到了什么?那 id 也是一个独特的价值吗?我看到你正在传递状态并期待一个 id 回来。我想知道 apollo 是否正在尝试使用 getAllCorpo 的 __typename 为您写入缓存条目,但是您有一个对象数组,其 id 不是结果的 id。 【参考方案1】:我认为您没有在订阅中进行正确的映射。在你的情况下试试这个:
this.apollo.query<any>(query: GetAllCorpoQuery, variables, fetchPolicy: 'network-only').subscribe(data =>
console.log(data);
this.corpos = data.getAllCorpo;
const nome = new MapColunaAtributo(this.colunas[0], 'nome');
const status = new MapColunaAtributo(this.colunas[1], 'status');
this.listPesquisa = [nome, status];
您的回复与订阅中指定的结构不同。
作为回应,你有这样的结构:
getAllCorpo: ...
但在订阅中,您尝试像这样访问:
subscribe((data) => ...
我认为问题存在。你必须像这样使用:
subscribe(data => console.log(data.getAllCorpo));
【讨论】:
以上是关于带 Angular 的 ApolloClient的主要内容,如果未能解决你的问题,请参考以下文章