如何優雅的在Vue Project中使用vue-apollo

首先咱們來熟悉下graphql的工做機制前端

一個GraphQL查詢能夠包含一個或者多個操做(operation),相似於一個RESTful API。操做(operation)能夠使兩種類型:查詢(Query)或者修改(mutation)。咱們看一個例子:vue

`query {
  client(id: 1) {
    id 
    name
  }
}`

那麼問題來了,咱們已經用熟了axios或者fetch 再或者ajax來進行數據的交互,如:ios

getRecommdBook (type) {
      this.axios.get(`/books/web/recommendation-api/recommendation/official?type=${type}`)
        .then(res => {
          if (res.data) {
            this.recommdBookfun(res.data)
            console.log(this.recommdBook)
          }
        })
        .catch(err => {
          console.log(err)
        })
    },

怎樣以咱們熟悉的形式來運用apollo,使查詢更加簡便呢git

首先咱們先在vue項目中引用apollo-vue(apollo非親生兒子) 做者是Guillaume Chau(vue的開發團隊人員)github

githttps://github.com/Akryum/vue...web

npm install --save vue-apollo apollo-client

main.js引用ajax

// apollo配置

    import { ApolloClient, createNetworkInterface } from 'apollo-client'
    import VueApollo from 'vue-apollo'

構建客戶端
能夠構建多個適應不一樣接口npm

const networkInterfaceTask = createNetworkInterface({
      uri: '/api/tasks/graphql',
      transportBatching: true,
      opts: {
        credentials: 'include'
      }
    })
    
    const apolloClientTask = new ApolloClient({
      networkInterface: networkInterfaceTask,
      connectToDevTools: true
    })
    
    const apolloProvider = new VueApollo({
      clients: {
        task: apolloClientTask
      },
      defaultClient: apolloClientTask
    })

使用apolloaxios

Vue.use(VueApollo)

根目錄引用api

new Vue({
  el: '#app',
  router,
  axios,
  store,
  apolloProvider,
  template: '<App/>',
  components: { App }
})

好到此爲止,基礎配置就已經ok了
接下來就是實際的請求了
在vue 的組件中,好比 test.vue

咱們的例子是帶參數的查詢
首先在組件裏構建查詢的變量

import gql from 'graphql-tag'

const getErSeasons = gql`query erSeasons($classId: Long!) {
                            erSeasons{
                              id
                              name
                              startTime
                              endTime
                              classTask(class:$classId){
                                id
                                classId
                                startTime
                                endTime
                                status
                              }
                            }
                          }`

不懂的話先去查下教程api
而後在methods裏面

changeClass (id) {
      this.ClassSeasons = []
      this.Select = id
      console.log(this.$apollo.query)
      this.$apollo.query({
        query: getErSeasons,
        variables: {
          classId: this.Select
        }
      })
        .then(res => {
          this.Parse(res.data.erSeasons)
          console.log(res)
        })
        .catch(err => {
          console.log(err)
        })
    }
    
這個形式是否是有點熟悉了。哈哈哈
能夠了。之後就又能夠愉快的裝逼了
本文章只適於初學者

做者:考拉閱讀前端工程師
相關文章
相關標籤/搜索