温馨提示:本文翻译自stackoverflow.com,查看原文请点击:angular - Send 2 identical Graphql queries in one call but with different variables
angular apollo graphql apollo-client

angular - 在一个调用中发送2个相同的Graphql查询,但具有不同的变量

发布于 2020-04-08 12:34:47

我有一个搜索查询,它接受一个变量并基于该变量进行搜索。

在我的主页上,我想使用3个不同的变量将此查询发送3次。

但是,如果我像上面那样做,我将无法获得结果。

这是查询:

const TOP_TEACHER_QUERY= gql`
    query topTeachers {
        searchBasicTeachersByRating(rating: 3) {
            id
            name
            title
        }
        searchBasicTeachersByRating(rating: 4) {
            id
            name
            title
            isNew
        }
    }
}

这是功能

allQueries() {
    return this.apollo
        .watchQuery<any>({
            query: TOP_TEACHER_QUERY,
        })
        .valueChanges;
}

注意 :

我尝试添加接口并定义所需的响应数据,但没有任何效果

interface Response {
    searchBasicTeachersByRatingMedium: Student[];
    searchBasicTeachersByRatingHigh: Student[];
}

allQueries() {
    return this.apollo
        .watchQuery<any>({
            query: TOP_TEACHER_QUERY,
        })
        .valueChanges;
}

数据仅包含查询后命名的列表(searchBasicTeachersByRating)

我在graphql游乐场尝试了以下查询,它返回2个数组,但是在Angular中我只能得到一个

作为解决方案,我在后端创建了新查询,或发送了2个不同的查询。

但是我想要这种方法的解决方案。

提前致谢

查看更多

提问者
Farhad
被浏览
58
Daniel Rearden 2020-02-01 12:41

当选择集多次包含同一字段时,您需要为重复的字段使用别名:

searchBasicTeachersByRatingMedium: searchBasicTeachersByRating(rating: 3) {
  id
  name
  title
}
searchBasicTeachersByRatingHigh: searchBasicTeachersByRating(rating: 4) {
  id
  name
  title
  isNew
}

请求完成后,每个字段将作为data提供的别名下的属性提供。在上面的示例中,我们对两个字段都使用了别名,但是您可以在其中一个字段中省略别名。