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 相关文章推荐
javascript 表格排序和表头浮动效果(扩展SortTable)
Apr 07 Javascript
url地址自动加#号问题说明
Aug 21 Javascript
javascript自适应宽度的瀑布流实现思路
Feb 20 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
jquery实现简单Tab切换菜单效果
Jul 17 Javascript
Bootstrap如何激活导航状态
Mar 22 Javascript
jQuery自定义图片上传插件实例代码
Apr 04 jQuery
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
Vue $mount实战之实现消息弹窗组件
Apr 22 Javascript
浅谈Express.js解析Post数据类型的正确姿势
May 30 Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 Javascript
利用JS判断元素是否为数组的方法示例
Jan 08 Javascript
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
利用 window_onload 实现select默认选择
2006/10/09 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
php实现的农历算法实例
2015/08/11 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
pygame播放音乐的方法
2015/05/19 Python
python图片验证码生成代码
2016/07/02 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
2014年检验科工作总结
2014/11/22 职场文书
杭白菊导游词
2015/02/10 职场文书
教师个人年终总结
2015/02/11 职场文书
涨价通知
2015/04/23 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
pandas中对文本类型数据的处理小结
2021/11/01 Python
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL