Angular — GraphQL — Мутация (большой объект)

В следующем примере у нас есть мутация, создающая запись. Это простой пример с двумя параметрами: 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);
});
}
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
407
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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
  }
}

Но, опять же, схема должна поддерживать такое использование. Как клиент, вы не имеете над этим контроля.

Должен ли я установить тип CreatePostInput в angular? Я установил его только на бэкэнд-схеме. Но даже это работает... Webstorm пишет "Неизвестный тип CreatePostInput"

Michalis 07.04.2019 17:50

Трудно сказать, откуда исходит это предупреждение, без подробностей. Поскольку это не связано с вашим первоначальным вопросом, если вы не можете его решить, рассмотрите возможность поиска SO, и если вопроса еще нет, вы можете опубликовать новый.

Daniel Rearden 07.04.2019 18:34

Другие вопросы по теме