在以下示例中,我们有一个创建帖子的变异。这是一个仅包含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);
});
}
答案 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
}
}
但是,架构必须再次支持这种用法。作为客户,您无法对此进行控制。