加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:36:57 所属栏目:百科 来源:网络整理
导读:1、首先我们需要安装一下vue-apollo 具体执行命令如下: 代码如下: 2、在我们的项目的根目录下创建一个vueApollo.js文件具体配置如下: 3,接着我们将配置好的js文件引入到man.js中,具体如下: // Install the vue plugin // Vue.component('full-calendar',

1、首先我们需要安装一下vue-apollo 具体执行命令如下:

代码如下:

2、在我们的项目的根目录下创建一个vueApollo.js文件具体配置如下:

3,接着我们将配置好的js文件引入到man.js中,具体如下:

// 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: '',components: { App },});

准备好这些,我们就可以开始使用了,另外如果有谷歌账号,可以在谷歌的应用商店去下载“Apollo Client Developer Tools”插件,来模拟vue-apollo调用接口,当然你也可以直接看后端的代码,然后看接口的定义

4,然后在项目的根目录下创建一个graphql文件夹,这个文件里面去封装每一个模块所对应的方法,为了代码的简洁,可以每一个模块建立一个js文件,实现接口方法的统一管理,比如说我创建了一个交atemplate.graphql文件,注意这个文件夹下所有的文件后缀名都是.graphql。

首先我们说一下query方式的调用:具体代码如下:

5,然后将该方法引入到所需要调用的vue文件中引入方式如下:

代码如下:

然后在vue的methods中定义一个方法,最后调用

{ const assessTempalteListings = data.assessTemplateListings; consloe.log(assessTempalteListings); }); }

根据我们的需求因为是获取列表的,所以在created方法里面去调用这个方法即

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

在vue中的使用

{ }).catch((error) => { this.$message.error(Util.Comm.graphqlError(error.message)); }); }

用法我们就说完了,接下来总结一下

1、因为前端采用vue-apollo客户端发送fetch方式的graphql的请求,而fetch请求也有的缺点:fetch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理,所以说对于vue-axios的try,catch是获取不到错误的,Apollo请求超时的问题无法解决,httpLink没有提供timeout的接口,导致无法中断或重连当前请求

2、通过Apollo查询返回的数据是freeze状态,无法修改,可以通过对象浅拷贝或者序列化的方式解冻。这个坑我自己趟过。 因为我要做一个对于某一个模板增加适用模板区域的功能,那么要求是先调用模板详情接口,如果有区域就显示出来,对已有的区域可以做增删改的功能,获取到数据后存在vuex中,当我添加完成后更改vuex的数据报错,意思是不允许更改,解决办法就是在初始化vuex的数据时先深拷贝一份数据存入到vuex中,而不是直接存入,另外建议可以使用lodash.js,因为这个js库集成了很多方法,不用写那么多繁琐的代码

3、再说一下query和mutaionl两种方式解释,按照官方的意思是

  • query:仅获取数据(fetch)的只读请求
  • mutaion:获取数据后还有写操作的请求

我个人认为,vue-apollo中的query方式就类似于Ajax中的get请求,而mutaion就类似于post请求

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读