vue中使用GraphQL的实例代码


Posted in Javascript onNovember 04, 2019

上篇给大家介绍了Java 使用 Graphql 搭建查询服务详解。这里我们讲讲如何在Vue中使用GraphQL。

1. 初始化vue项目

npm install -g @vue/cli
vue create vue-apollo-demo

选择默认cli的默认模板就可以了

添加 /src/graphql/article.js 、 /src/utils/graphql.js 两个文件。

├── node_modules
└── public
│ ├── favicon.ico
│ └── index.html
├── src
│ ├── assets
│ │ └── home.js
│ ├── components
│ │ └── HelloWorld.js
│ ├── graphql
│ │ ├── article.js
│ ├── utils
│ │ ├── graphql.js
│ ├── App.vue
│ └── main.js
├── package.json
└── package-lock.json

2. 安装Apollo客户端

vue-apollo 可以帮助你在应用中使用GraphQL的一套工具。

你可以使用Apollo Boost或 直接使用 Apollo Client(需要更多配置工作)。

name这里用 Apollo Boost 就可以了,如果你想要更细粒度的控制,可以去看 Vue Apollo 的文档。

Apollo Boost 是一种零配置开始使用 Apollo Client 的方式。它包含一些实用的默认值,例如我们推荐的 InMemoryCache 和 HttpLink ,它非常适合用于快速启动开发。

将它与 vue-apollo 和 graphql 一起安装:

npm install --save vue-apollo graphql apollo-boost

3. 创建ApolloClient实例

在你的应用中创建一个 ApolloClient 实例:

/src/utils/graphql.js
import ApolloClient from 'apollo-boost';
const apolloClient = new ApolloClient({
 // 你需要在这里使用绝对路径
 uri: 'http://127.0.0.1:7001/graphql'
})
export default apolloClient;

4. 添加GraphQL的操作实例

/src/utils/article.js

import gql from 'graphql-tag'
import apolloClient from '../utils/graphql'

export function getArticleList(params) {
 return apolloClient.query({
  query: gql`query ($first: ID) {
   articleList(first: $first){
    id
    title
    content
    author {
     name
     age
    }
   }
  }`,
  variables: params
 })
}

export function createArticle(params) {
 return apolloClient.mutate({
  mutation: gql`mutation ($title: String, $content: String, $author: AddAuthor) {
   addArticle(title: $title, content: $content, author: $author){
    id
    title
    content
    author {
     age
     name
    }
   }
  }`,
  variables: params
 })
}

5. 调试

/src/App.vue

<template>
 <div id="app">
 <div class="list">
  <h1>文章列表</h1>
  <ul>
  <li v-for="(v, k) of list" :key="k">
   文章名称: {{ v.title }}----------------({{ v.author.name }})
  </li>
  </ul>
 </div>
 <div class="form">
  <h1>添加文章</h1>
  标题:<input v-model="formData.title" type="text"><br>
  作者名称: <input v-model="formData.author.name" type="text"><br>
  作者年龄: <input v-model.number="formData.author.age" type="text"><br>
  文章内容: <textarea v-model="formData.content" name="" id="" cols="30" rows="10"></textarea>
  <button @click="createArticle">添加</button>
 </div>
 </div>
</template>

<script>
import { getArticleList, createArticle } from './graphql/article'
export default {
 name: 'app',
 data() {
 return {
  list: [],
  formData: {
  title: '',
  content: '',
  author: {
   name: '',
   age: ''
  }
  }
 }
 },
 mounted() {
 this.initData()
 },
 methods: {
 initData() {
  getArticleList({first: 0})
  .then(res=>{
   console.log('request success')
   console.log(res.data.articleList.length)
   this.list = res.data.articleList
  })
  .catch(err=>{
   console.log(err)
  })
 },
 createArticle() {
  createArticle(this.formData)
  .then(()=>{
   this.initData()
  })
  .catch(err=>{
   console.log(err)
  })
 }
 }
}
</script>

效果如下:

vue中使用GraphQL的实例代码 

总结

以上所述是小编给大家介绍的vue中使用GraphQL的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js与jquery中获取当前鼠标的x、y坐标位置的代码
May 23 Javascript
用JS将搜索的关键字高亮显示实现代码
Nov 08 Javascript
jquery选择器需要注意的问题
Nov 26 Javascript
jquery实现一个简单的表单验证实例
Mar 30 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
Jun 12 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
Apr 25 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
JavaScript设计模式之职责链模式应用示例
Aug 07 Javascript
vue单页缓存存在的问题及解决方案(小结)
Sep 25 Javascript
vue瀑布流组件实现上拉加载更多
Mar 10 Javascript
详解js创建对象的几种方式和对象方法
Mar 01 Javascript
Vue Element plus使用方法梳理
Dec 24 Vue.js
Vue项目中Api的组织和返回数据处理的操作
Nov 04 #Javascript
JS+CSS实现随机点名(实例代码)
Nov 04 #Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 #Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 #Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
Nov 04 #jQuery
JS立即执行的匿名函数用法分析
Nov 04 #Javascript
小程序如何自主实现拦截器的示例代码
Nov 04 #Javascript
You might like
PHP获取网卡地址的代码
2008/04/09 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
小程序实现左滑删除功能
2018/10/30 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
Python的print用法示例
2014/02/11 Python
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
Python的迭代器和生成器
2015/07/29 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
python实现求最长回文子串长度
2018/01/22 Python
Python pandas用法最全整理
2019/08/04 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
写好自荐信的技巧
2013/11/08 职场文书
环境保护标语
2014/06/20 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
Nginx的基本概念和原理
2022/03/21 Servers
JS setTimeout与setInterval的区别
2022/04/20 Javascript