带 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的主要内容,如果未能解决你的问题,请参考以下文章

带 angular2 的非 SPA

Angular:带参数的 npm 脚本

带 Angular 的 ApolloClient

Angular 4:带插值的动态模板

带 Angular 的引导程序“错误:$(...).collapse() 不是函数”

将 AngularJS 迁移到 Angular 4,5(带演示)[关闭]