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 相关文章推荐
img的onload的另类用法
Jan 10 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
Jan 22 Javascript
js动态调用css属性的小规律及实例说明
Dec 28 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
Mar 13 Javascript
JavaScript中的this关键字使用方法总结
Mar 13 Javascript
解决jquery无法找到其他父级子集问题的方法
May 10 Javascript
JavaScript中自带的 reduce()方法使用示例详解
Aug 10 Javascript
js正则表达式注册页面表单验证
Oct 11 Javascript
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
JS实现json对象数组按对象属性排序操作示例
May 18 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
Jul 30 Javascript
js重写alert事件(避免alert弹框标题出现网址)
Dec 04 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
PHP开发大型项目的一点经验
2006/10/09 PHP
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
php minixml详解
2008/07/19 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
python生成IP段的方法
2015/07/07 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
小学生环保倡议书
2014/05/15 职场文书
超市开店计划书
2014/09/15 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
工会工作个人总结
2015/03/03 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
超市主管竞聘书
2015/09/15 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
师德培训心得体会2016
2016/01/09 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis