vuejs2 - 如何在 vue-apollo 客户端中定义 GraphQL 输入类型

标签 vuejs2 graphql apollo apollo-client vue-apollo

情况:

我正在使用 laravel-graphql作为后端 GraphQL 服务和 vue-apollo作为前端客户端。

在我的 Vue 组件中,我有一个 gql 查询如下:(关系:A Song has more SongParts)

const getSong = gql`
    query FetchSong ($id:Int!){
        song(id: $id) {
            id,
            name,
            authors_lyrics,
            authors_music
            song_parts{
                type
                lyrics
            }
        }
    }`;

现在我想使用一个突变来更新给定的歌曲:

const updateSong = gql`
    mutation updateSongMutation ($id:Int!,$name:String,$authors_lyrics:String,$authors_music:String, $song_parts: [SongPart]) {
        updateSongMutation(id: $id, name: $name, authors_lyrics: $authors_lyrics, authors_music: $authors_music, song_parts: $song_parts) {
            id
        }
    }`;

.. 并且在 Vue 组件中这样使用:

methods: {
            save: function(){
                this.$apollo.mutate({
                    mutation: updateSong,
                    variables: this.songData,
                }).then((result) => {
                    console.log(result);
                }).catch((error) => {
                    console.log(error);
                })
            }
        },

但是,要更新 song_parts 数组,我需要定义自定义输入类型:

input SongPart{
    id: Int!
    lyrics: String
}

问题

我不知道在哪里定义这个输入类型。当我在 Chrome WebTools 中使用 GraphiQL 时,在突变前定义它没有问题。我还找到了一些关于 apollo 服务器的信息,但我在客户端需要它。

所以基本上问题是关于改变数据列表。

最佳答案

您的输入类型仍应在服务器上的模式中定义。我对 laravel 不是很熟悉,但是查看 laravel-graphql 的文档,看起来目前输入的定义就像常规类型一样,您只需将 $inputObject 属性设置为 true。参见示例 here .我想您随后会将它们与常规类型一起添加到 config/graphql.php 中的类型中。

我还建议将输入重命名为类似 SongPartInput 的名称,这样如果您也有 SongPart 的类型,您就不会感到困惑。

关于vuejs2 - 如何在 vue-apollo 客户端中定义 GraphQL 输入类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45332321/

相关文章:

vuejs2 - 是否可以在没有构建器的情况下将 ag-grid 与 vue 一起使用?

javascript - 如何在 Vue.js 模板中设置大量 HTML?

sequelize.js - 如何在我的架构中定义分页参数?

android - GraphQL 查询在 .graphQl 文件中显示错误

javascript - Apollo 客户端 - 使用对象列表中的缓存结果来响应对单个对象的查询

vuejs2 - 如何在使用 vue-cli3 创建的 Vue2 项目中使用 axios

components - Vuejs 2 将 Prop 对象传递给子组件并检索

node.js - Apollo服务器设置cookie在下一个js应用程序中访问

java - 如何为 graphql-java-servlet 和 Micronaut Controller 配置 GraphQL servlet 端点?

apollo - 在 Apollo Client 3 中合并非规范化数据时出现 "Cache data may be lost"警告