В следующем примере у нас есть мутация, создающая запись. Это простой пример с двумя параметрами: title и 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.info('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
}
}
Но, опять же, схема должна поддерживать такое использование. Как клиент, вы не имеете над этим контроля.
Трудно сказать, откуда исходит это предупреждение, без подробностей. Поскольку это не связано с вашим первоначальным вопросом, если вы не можете его решить, рассмотрите возможность поиска SO, и если вопроса еще нет, вы можете опубликовать новый.
Должен ли я установить тип CreatePostInput в angular? Я установил его только на бэкэнд-схеме. Но даже это работает... Webstorm пишет "Неизвестный тип CreatePostInput"