Angular-GraphQL-变异(大对象)

时间:2019-04-07 13:28:08

标签: angular graphql apollo-client

在以下示例中,我们有一个创建帖子的变异。这是一个仅包含2个参数(标题和网址)的简单示例。如果这篇文章有很多争论该怎么办。还有其他方法可以传递参数吗?或只有一个一个。我们可以传递整个物体吗?

newPost() {
  this.apollo.mutate({
  mutation: gql`mutation($title: String, $url: String) {
    createPost(title: $title, url: $url) {
      title
      url
    }
  }
 `,
 variables: {
   title: this.someForm.get('title'),
   url: this.someForm.get('url')'
 }
}).subscribe(data => {
   console.log('New post created!', data);
});
}

1 个答案:

答案 0 :(得分:1)

这是特定于服务器端实现的。例如,服务器的架构可能如下所示:

type Mutation {
  createPost(title: String! url: String!): Post
}

在这种情况下,如果您使用变量,则作为客户端,由于GraphQL不支持某种“扩展”语法,因此您必须每个参数使用一个变量。但是,该架构可以利用输入对象类型来分组多个参数,例如:

type Mutation {
  createPost(input: CreatePostInput!): Post
}

input CreatePostInput {
  title: String!
  url: String!
}

在这种情况下,可以使用作为对象的单个变量:

mutation($input: CreatePostInput!) {
  createPost(input: $input) {
    title
    url
  }
}

但是,架构必须再次支持这种用法。作为客户,您无法对此进行控制。