繁体   English   中英

阿波罗 Angular 服务

[英]Apollo Angular Services

我正在使用 grapqhl-codegen 将我的查询转换为可注入的服务,一切都像魅力一样工作,此外,我不能 updateQuerys 了,因为我只有服务,我不能将服务传递到 updatesQuerys 数组中。 我希望 userGql 服务重新获取数据,而不是使用缓存:

loginAttempt() {
    const data = this.loginForm.value;
    this.loginGql
      .mutate({ data }, {updateQueries: [CANT ADD SERVICE HERE]})
      .pipe(
        pluck("data", "login"),
        switchMap(async (token: string) => {
          await this.storage.setToken(token);
          return this.userGql.fetch().toPromise();
        })
      )
      .subscribe((res) => console.log("res: ", res));
  }```

如果您希望在突变后重新获取查询,则需要使用refetcQueries updateQueries用于手动更新缓存(也已弃用,请参阅update ),因此它不会为您提供所需的内容。

我知道至少有两种使用refetchQueries的方法。

一种是查询名称,这将在正在查看相关查询时起作用:

this.loginGql
  .mutate({ data }, { refetchQueries: ["UserQuery"] }) // <-- this
  .pipe(
    pluck("data", "login")
  )
  .subscribe((token: string) => {
    this.storage.setToken(token);
    // ... no need to manually fetch the query here
  })

另一种选择是参考服务文档。 我相信这将强制获取查询。

this.loginGql
  .mutate(
    {
      data
    },
    {
      refetchQueries: {
        query: this.faqQuestionsQuery.document  // <-- this
      }
    }
  )
  .pipe(
    pluck("data", "login")
  )
  .subscribe((token: string) => {
    this.storage.setToken(token);
    // ... no need to manually fetch the query here
  })

不要忘记变量在这里也很重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM