角度 - 图形QL - 突变(大对象)



在下面的示例中,我们有一个创建帖子的突变。这是一个只有 2 个参数、标题和 url 的简单示例。如果这篇文章有很多论点怎么办。还有其他方法可以传递参数吗?或者只有一个接一个。我们可以传递整个对象吗?

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);
});
}

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

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
  }
}

但是,同样,架构必须支持这种用法。作为客户,您无法控制这一点。

最新更新