在Vue.js中使用Apollo需要引入apollo-boost和vue-apollo两个库。首先,安装这两个库:
-
在终端中运行npm install apollo-boost vue-apollo --save命令,安装所需的依赖库。
-
在Vue.js组件中引入vue-apollo库:
import Vue from "vue"
import VueApollo from "vue-apollo"
import ApolloClient from "apollo-boost"
// Create the apollo client
const apolloClient = new ApolloClient({
uri: "https://api.example.com/graphql"
})
// Install the vue plugin
Vue.use(VueApollo)
// Create the apollo provider
const apolloProvider = new VueApollo({
defaultClient: apolloClient,
})
// Create the vue instance
new Vue({
el: "#app",
apolloProvider,
// ...
})
- 在Vue.js组件中使用Apollo:
import gql from "graphql-tag"
export default {
apollo: {
// Query
posts: gql`
query {
posts {
id
title
content
}
}
`,
// Mutation
createPost: gql`
mutation($title: String!, $content: String!) {
createPost(title: $title, content: $content) {
id
title
content
}
}
`,
},
// ...
}
- 在Vue.js组件中使用查询结果:
<template>
<div>
<ul>
<li v-for="post in posts" :key="post.id">
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
</li>
</ul>
<form @submit.prevent="createPost">
<input v-model="title" type="text" placeholder="Title">
<textarea v-model="content" placeholder="Content"></textarea>
<button type="submit">Create Post</button>
</form>
</div>
</template>
<script>
export default {
apollo: {
posts: {
query: gql`
query {
posts {
id
title
content
}
}
`,
},
createPost: {
mutation: gql`
mutation($title: String!, $content: String!) {
createPost(title: $title, content: $content) {
id
title
content
}
}
`,
},
},
data() {
return {
title: "",
content: "",
}
},
methods: {
async createPost() {
const response = await this.$apollo.mutate({
mutation: this.createPost,
variables: {
title: this.title,
content: this.content,
},
})
// Do something with the response
console.log(response)
// Reset the form
this.title = ""
this.content = ""
},
},
}
</script>