最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解在vue-cli中使用graphql即vue-apollo的用法

 更新時(shí)間:2018年09月08日 16:29:58   作者:zah521999  
這篇文章主要介紹了詳解在vue-cli中使用graphql即vue-apollo的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

1、首先我們需要安裝一下vue-apollo 具體執(zhí)行命令如下:

復(fù)制代碼 代碼如下:
npm install –save vue-apollo graphql apollo-client apollo-link apollo-link-http apollo-cache-inmemory graphql-tag

2、在我們的項(xiàng)目的根目錄下創(chuàng)建一個(gè)vueApollo.js文件具體配置如下:

import { ApolloClient } from 'apollo-client';
import { HttpLink } from 'apollo-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';
import VueApollo from 'vue-apollo';
const httpLink = new HttpLink({
 uri: './v1/assess/api',
 /* 其中./v1是我在vue的config中配置時(shí)解決跨域時(shí)起的代理一個(gè)名字,后面的是后端
 暴露接口方法的地址 */
 credentials: 'same-origin',
 /* 這個(gè)屬性的意思是在同源的情況下攜帶cookie,因?yàn)関ue-apollo本身發(fā)送的是一個(gè)fetch請(qǐng)求,所以在發(fā)送請(qǐng)求時(shí)不會(huì)自動(dòng)攜帶cookie,所以我們需要加上此屬性 */
});
const apolloClient = new ApolloClient({
 link: httpLink,
 cache: new InMemoryCache(),
 connectToDevTools: true,
});
export default new VueApollo({
 defaultClient: apolloClient,
 clients: { default: apolloClient },
});

3,接著我們將配置好的js文件引入到man.js中,具體如下:

import Vue from 'vue';
import ElementUI from 'element-ui';
import VueApollo from 'vue-apollo';
import apolloProvider from './apollo';

// Install the vue plugin

// Vue.component('full-calendar', fullCalendar);
Vue.config.productionTip = false;
Vue.use(ElementUI);
Vue.use(VueApollo);

/* eslint-disable no-new */
new Vue({
 el: '#app',
 provide: apolloProvider.provide(),
 //這句代碼是我們要和vuex一樣,將apolloProvider添加為根組件
 router,
 store,
 template: '<App/>',
 components: { App },
});

準(zhǔn)備好這些,我們就可以開始使用了,另外如果有谷歌賬號(hào),可以在谷歌的應(yīng)用商店去下載“Apollo Client Developer Tools”插件,來模擬vue-apollo調(diào)用接口,當(dāng)然你也可以直接看后端的代碼,然后看接口的定義

4,然后在項(xiàng)目的根目錄下創(chuàng)建一個(gè)graphql文件夾,這個(gè)文件里面去封裝每一個(gè)模塊所對(duì)應(yīng)的方法,為了代碼的簡潔,可以每一個(gè)模塊建立一個(gè)js文件,實(shí)現(xiàn)接口方法的統(tǒng)一管理,比如說我創(chuàng)建了一個(gè)交atemplate.graphql文件,注意這個(gè)文件夾下所有的文件后綴名都是.graphql。

首先我們說一下query方式的調(diào)用:具體代碼如下:

query getAssessTemplateListings($query: String, $state: Int, $page: Int, $pageSize: Int) {
 assessTemplateListings(query: $query, state: $state, page: $page, pageSize: $pageSize) {
 assessTemplates {
  id
  groupId
  name
  description
  state
  createdAt
  updatedAt
 }
 page
 pageSize
 total
 }
}

5,然后將該方法引入到所需要調(diào)用的vue文件中引入方式如下:

復(fù)制代碼 代碼如下:
import { getAssessTemplateListings, stopAssessTemplate } from '@/services/graphql/assessTemplate.graphql';

然后在vue的methods中定義一個(gè)方法,最后調(diào)用

lodAtemplate() {
  this.$apollo.query({
    query: getAssessTemplateListings,
    variables: {
    state: 1,
    page: this.currentPage,
    pageSize: this.pageSize,
    },
    fetchPolicy: 'network-only',
    /* 如果一個(gè)獲取數(shù)據(jù)的列表,在參數(shù)沒有變化的時(shí)候,那我們希望用后臺(tái)數(shù)據(jù)的緩存,則需要在請(qǐng)求下方加上 fetchPolicy: 'network-only'來做緩存 */
   }).then(({ data }) => {
    const assessTempalteListings = data.assessTemplateListings;
    consloe.log(assessTempalteListings);
   });
}

 根據(jù)我們的需求因?yàn)槭谦@取列表的,所以在created方法里面去調(diào)用這個(gè)方法即

 created () {
 this.lodAtemplate();
 }

然后再看一下mutation的用法,封裝如下:

mutation stopAssessTemplate($input: StopAssessTemplateInput!) {
 stopAssessTemplate(input: $input) {
 clientMutationId
 }
}

在vue中的使用

stop () {
 this.$apollo.mutate({
  mutation: stopAssessTemplate,
  variables: {
  input: {
   clientMutationId: uuidv1(),
   id: obj.id,
  },
  },
  }).then(() => {
  }).catch((error) => {
  this.$message.error(Util.Comm.graphqlError(error.message));
  });
}

用法我們就說完了,接下來總結(jié)一下

1、因?yàn)榍岸瞬捎胿ue-apollo客戶端發(fā)送fetch方式的graphql的請(qǐng)求,而fetch請(qǐng)求也有的缺點(diǎn):fetch只對(duì)網(wǎng)絡(luò)請(qǐng)求報(bào)錯(cuò),對(duì)400,500都當(dāng)做成功的請(qǐng)求,需要封裝去處理,所以說對(duì)于vue-axios的try,catch是獲取不到錯(cuò)誤的,Apollo請(qǐng)求超時(shí)的問題無法解決,httpLink沒有提供timeout的接口,導(dǎo)致無法中斷或重連當(dāng)前請(qǐng)求

2、通過Apollo查詢返回的數(shù)據(jù)是freeze狀態(tài),無法修改,可以通過對(duì)象淺拷貝或者序列化的方式解凍。這個(gè)坑我自己趟過。
因?yàn)槲乙鲆粋€(gè)對(duì)于某一個(gè)模板增加適用模板區(qū)域的功能,那么要求是先調(diào)用模板詳情接口,如果有區(qū)域就顯示出來,對(duì)已有的區(qū)域可以做增刪改的功能,獲取到數(shù)據(jù)后存在vuex中,當(dāng)我添加完成后更改vuex的數(shù)據(jù)報(bào)錯(cuò),意思是不允許更改,解決辦法就是在初始化vuex的數(shù)據(jù)時(shí)先深拷貝一份數(shù)據(jù)存入到vuex中,而不是直接存入,另外建議可以使用lodash.js,因?yàn)檫@個(gè)js庫集成了很多方法,不用寫那么多繁瑣的代碼

3、再說一下query和mutaionl兩種方式解釋,按照官方的意思是

  • query:僅獲取數(shù)據(jù)(fetch)的只讀請(qǐng)求
  • mutaion:獲取數(shù)據(jù)后還有寫操作的請(qǐng)求

我個(gè)人認(rèn)為,vue-apollo中的query方式就類似于Ajax中的get請(qǐng)求,而mutaion就類似于post請(qǐng)求

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue實(shí)現(xiàn)五子棋游戲

    vue實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Vue3開發(fā)必備的六個(gè)VSCode插件推薦

    Vue3開發(fā)必備的六個(gè)VSCode插件推薦

    在VSCode中添加好用的插件可以提高我們的開發(fā)效率,這些可以幫助我們格式化,擴(kuò)充性,執(zhí)行最佳實(shí)踐的代碼方式,自動(dòng)完成一些瑣碎的事情,下面這篇文章主要給大家推薦介紹了關(guān)于Vue3開發(fā)必備的六個(gè)VSCode插件,需要的朋友可以參考下
    2022-12-12
  • vue3組件通信的方式總結(jié)及實(shí)例用法

    vue3組件通信的方式總結(jié)及實(shí)例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于vue3組件通信的方式總結(jié)及實(shí)例用法,對(duì)此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • Vue項(xiàng)目中引入外部腳本的多種方式

    Vue項(xiàng)目中引入外部腳本的多種方式

    在現(xiàn)代的前端開發(fā)中,我們經(jīng)常需要使用一些第三方的外部腳本或庫,尤其是像地圖、圖表、分析工具等,在 Vue 項(xiàng)目中,有多種方式可以引入外部腳本,本文將詳細(xì)介紹在 Vue 項(xiàng)目中引入外部腳本的幾種常見方法,需要的朋友可以參考下
    2025-01-01
  • 解讀為什么vue前端項(xiàng)目要使用Nodejs

    解讀為什么vue前端項(xiàng)目要使用Nodejs

    這篇文章主要介紹了解讀為什么vue前端項(xiàng)目要使用Nodejs問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • vue2?element?實(shí)現(xiàn)表格點(diǎn)擊詳情返回時(shí)保留查詢參數(shù)的示例代碼

    vue2?element?實(shí)現(xiàn)表格點(diǎn)擊詳情返回時(shí)保留查詢參數(shù)的示例代碼

    這篇文章主要介紹了vue2?element?實(shí)現(xiàn)表格點(diǎn)擊詳情返回時(shí)保留查詢參數(shù)的示例代碼,本文通過圖文示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Vue3 + CSS實(shí)現(xiàn)一個(gè)噴火龍動(dòng)畫效果

    Vue3 + CSS實(shí)現(xiàn)一個(gè)噴火龍動(dòng)畫效果

    不知不覺中,2023年已然逝去了,龍年到了,所以本文小編使用Vue3 + CSS實(shí)現(xiàn)一個(gè)噴火龍的動(dòng)畫效果,文中有相關(guān)的代碼示例供大家參考,具有一定的參考價(jià)值,感興趣的同學(xué)可以自己動(dòng)手嘗試一下
    2024-02-02
  • 解決vue報(bào)錯(cuò):Do?not?mutate?vuex?store?state?outside?mutation?handlers問題

    解決vue報(bào)錯(cuò):Do?not?mutate?vuex?store?state?outside?mutati

    這篇文章主要介紹了解決vue報(bào)錯(cuò):Do?not?mutate?vuex?store?state?outside?mutation?handlers問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • el-table渲染慢卡頓問題最優(yōu)解決方案

    el-table渲染慢卡頓問題最優(yōu)解決方案

    本文主要介紹了el-table渲染慢卡頓問題最優(yōu)解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • vue-cli + sass 的正確打開方式圖文詳解

    vue-cli + sass 的正確打開方式圖文詳解

    本文通過圖文并茂的形式給大家介紹了vue-cli + sass 的正確打開方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-10-10

最新評(píng)論

漠河县| 和静县| 资兴市| 白玉县| 屏东县| 建始县| 昌吉市| 茶陵县| 湘乡市| 太仆寺旗| 威宁| 绵竹市| 嘉祥县| 兴宁市| 安化县| 滦南县| 琼海市| 彰化市| 扶绥县| 南江县| 江山市| 仲巴县| 山西省| 鹿邑县| 井研县| 新竹县| 女性| 卢湾区| 娄烦县| 门源| 陕西省| 班戈县| 罗平县| 常宁市| 康马县| 磐石市| 南投县| 响水县| 内乡县| 三台县| 宣汉县|