目标

使用Vue+ElementUI+axios构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式。

什么是 axios?

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

安装axios

我们使用 NPM 进行安装

  1. npm install axios

查询

  1. setTodos() {
  2. const url = "https://localhost:44399/api/todo?pageIndex=1&pageSize=100";
  3. axios.get(url)
  4. .then((response) => {
  5. console.log(response);
  6. if (response.data.Code === 0) {
  7. this.Todos = response.data.Result;
  8. }
  9. });
  10. },

新增

  1. createTodo(item) {
  2. const url = "https://localhost:44399/api/todo";
  3. axios.post(url, item)
  4. .then((response) => {
  5. console.log(response);
  6. if (response.data.Code === 0) {
  7. this.setTodos();
  8. }
  9. });
  10. this.selectedIndex = -1;
  11. this.selectedItem = {};
  12. this.addDialogVisible = false;
  13. },

更新

  1. updateTodo(item) {
  2. const url = `https://localhost:44399/api/todo/${item.Id}`;
  3. axios.put(url, item)
  4. .then((response) => {
  5. console.log(response);
  6. if (response.data.Code === 0) {
  7. this.setTodos();
  8. }
  9. });
  10. this.selectedIndex = -1;
  11. this.selectedItem = {};
  12. this.editDialogVisible = false;
  13. },

删除

  1. deleteTodo(index) {
  2. const url = `https://localhost:44399/api/todo/${this.Todos[index].Id}`;
  3. axios.delete(url)
  4. .then((response) => {
  5. console.log(response);
  6. if (response.data.Code === 0) {
  7. this.setTodos();
  8. }
  9. });
  10. this.selectedIndex = -1;
  11. this.selectedItem = {};
  12. },

完整代码:

  1. <template>
  2. <div style="text-align: left">
  3. <el-button type="text" @click="addTodo()">新增</el-button>
  4. <el-table :data="Todos" style="width: 100%">
  5. <el-table-column type="index" width="50"> </el-table-column>
  6. <el-table-column prop="Name" label="名称"> </el-table-column>
  7. <el-table-column fixed="right" label="操作" width="100">
  8. <template slot-scope="scope">
  9. <el-button @click="editTodo(scope.$index)" type="text" size="small">编辑</el-button>
  10. <el-button @click="deleteTodo(scope.$index)" type="text" size="small">删除</el-button>
  11. </template>
  12. </el-table-column>
  13. </el-table>
  14. <TodoAddWithUI :dialogVisible="addDialogVisible" :selectedItem="selectedItem" @save="createTodo" @cancel="cancel"></TodoAddWithUI>
  15. <TodoEditWithUI :dialogVisible="editDialogVisible" :selectedItem="selectedItem" @save="updateTodo" @cancel="cancel"></TodoEditWithUI>
  16. </div>
  17. </template>
  18. <script>
  19. import axios from "axios";
  20. import TodoAddWithUI from "./TodoAddWithUI.vue";
  21. import TodoEditWithUI from "./TodoEditWithUI.vue";
  22. export default {
  23. components: {
  24. TodoAddWithUI,
  25. TodoEditWithUI,
  26. },
  27. data() {
  28. return {
  29. selectedIndex: -1, // 选择了哪条记录
  30. selectedItem: {}, // 选中的信息
  31. addDialogVisible: false,
  32. editDialogVisible: false,
  33. Todos: [],
  34. };
  35. },
  36. created: function () {
  37. this.setTodos();
  38. },
  39. methods: {
  40. setTodos() {
  41. const url = "https://localhost:44399/api/todo?pageIndex=1&pageSize=100";
  42. axios.get(url)
  43. .then((response) => {
  44. console.log(response);
  45. if (response.data.Code === 0) {
  46. this.Todos = response.data.Result;
  47. }
  48. });
  49. },
  50. addTodo() {
  51. this.addDialogVisible = true;
  52. },
  53. createTodo(item) {
  54. const url = "https://localhost:44399/api/todo";
  55. axios.post(url, item)
  56. .then((response) => {
  57. console.log(response);
  58. if (response.data.Code === 0) {
  59. this.setTodos();
  60. }
  61. });
  62. this.selectedIndex = -1;
  63. this.selectedItem = {};
  64. this.addDialogVisible = false;
  65. },
  66. editTodo(index) {
  67. this.selectedIndex = index;
  68. this.selectedItem = JSON.parse(JSON.stringify(this.Todos[index]));
  69. this.editDialogVisible = true;
  70. },
  71. updateTodo(item) {
  72. const url = `https://localhost:44399/api/todo/${item.Id}`;
  73. axios.put(url, item)
  74. .then((response) => {
  75. console.log(response);
  76. if (response.data.Code === 0) {
  77. this.setTodos();
  78. }
  79. });
  80. this.selectedIndex = -1;
  81. this.selectedItem = {};
  82. this.editDialogVisible = false;
  83. },
  84. deleteTodo(index) {
  85. const url = `https://localhost:44399/api/todo/${this.Todos[index].Id}`;
  86. axios.delete(url)
  87. .then((response) => {
  88. console.log(response);
  89. if (response.data.Code === 0) {
  90. this.setTodos();
  91. }
  92. });
  93. this.selectedIndex = -1;
  94. this.selectedItem = {};
  95. },
  96. cancel() {
  97. this.addDialogVisible = false;
  98. this.editDialogVisible = false;
  99. },
  100. },
  101. };
  102. </script>

TodoAddWithUI.vue和TodoEditWithUI.vue代码没有需要访问的Api,在这里就不贴了,其他代码:

小结

目前为止,我们完成了Vue+ElementUI+axios的CRUD,是不是还是挺简单的呀。其实你也可以使用Fetch API,Fetch API 是一个用于此类请求的强大的原生 API。你可能听说过 Fetch API 其中的一个好处,就是你不需要在使用它的时候额外加载一个外部资源。具体的用法跟axios基本上没有区别。

文中用到的代码我们放在:https://github.com/zcqiand/miscellaneous/tree/master/vue

一起学Vue:访问API(axios)的更多相关文章

  1. Vue.js Cookbook: 添加实例属性; 👍 axios(4万➕✨)访问API; filters过滤器;

    add instance properties //加上$,防止和已经定义的data,method, computed的名字重复,导致被覆写.//可以自定义添加其他符号. Vue.prototype. ...

  2. vue中比较完美请求的栗子(使用 axios 访问 API)

    vue中比较完美请求的栗子(使用 axios 访问 API) 官网地址:https://vuejs.bootcss.com/v2/cookbook/using-axios-to-consume-api ...

  3. vue全局使用axios插件请求ajax

    vue全局使用axios插件请求ajax Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方宣布停止更新vue-resource,并推 ...

  4. 一起学Vue之计算属性和侦听器

    概述 在Vue开发中,模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.当你想要在模板中多次引用相同表达式时,就会更加难以处理.所以,对于任何复 ...

  5. vue框架搭建--axios使用

    前后端数据交互作为项目最基础需求(静态的除外),同时也是项目中最重要的需求. 本文重点介绍axios如何配合vue搭建项目框架,而axios的详细使用介绍请移步使用说明 1.安装 cnpm insta ...

  6. 开发环境Vue访问后端接口教程(前后端分离开发,端口不同下跨域访问)

    原理:开发环境下的跨域:在node.js上实现请求转发,vue前端通过axios请求到node.js上,node.js将请求转发到后端,反之.响应也是,先到node.js上,然后转发vue-cil项目 ...

  7. 五、Vue:使用axios库进行get和post、用拦截器对请求和响应进行预处理、Mock(数据模拟)

    一.axios [应用]进行请求和传表单 [axios中文档]:https://www.kancloud.cn/yunye/axios/234845 [vue-axios]:https://cn.vu ...

  8. 【高德地图API】从零开始学高德JS API(六)——坐标转换

    原文:[高德地图API]从零开始学高德JS API(六)——坐标转换 摘要:如何从GPS转到谷歌?如何从百度转到高德?这些都是小case.我们还提供,如何将基站cell_id转换为GPS坐标? --- ...

  9. vue使用jsx/axios拦截器设置

    最害怕的就是做过的事情,转几天又忘记了:写过的代码,也模模糊糊不知道哪里去了,所以告诉自己最好把每天遇到的问题记录下来,好,开始. 新公司要搭个vue后台框架,所以用了简简单单的 vue+iview+ ...

随机推荐

  1. 我给VSCode报了个bug,微软工程师竟然凌晨回复了...

    柠檬哥整理了50本计算机相关的电子书,关注公众号「后端技术学堂」,回复「1024」即可获取,回复「进群」拉你进读者技术交流群. 本文首发个人微信公众号,欢迎围观点击阅读原文 最近遇到一个有意思的bug ...

  2. 初学源码之——银行案例手写IOC和AOP

    手写实现lOC和AOP 上一部分我们理解了loC和AOP思想,我们先不考虑Spring是如何实现这两个思想的,此处准备了一个『银行转账」的案例,请分析该案例在代码层次有什么问题?分析之后使用我们已有知 ...

  3. Node.js文件上传

    Node.js express使用Multer实现文件上传html部分 <div> <h3>文件上传:</h3> 选择一个文件上传: <br/> < ...

  4. nginx 1.12安装

    准备工作 使用root用户安装. 到nginx官网下载Linux源码或者执行:wget http://nginx.org/download/nginx-1.12.2.tar.gz. 到pcre站点下载 ...

  5. Python-列表推导式、生成器、字典推导式

    列表推导式 [] + for + if 算子.循环.条件, 对相同的数据进行处理, 算子也可以是函数 number = [i for i in range(1, 101) if i % 2 == 0] ...

  6. mysql-1-select

    #进阶1:基础查询 /* 语法: SELECT 查询列表 FROM 表名; 特点: 1.查询列表可以是:表中字段.常量值.表达式.函数 2.查询的结果是一个虚拟的表格 */ USE myemploye ...

  7. 剑指offer-字符串&数字规律

    1. 表示数值的字符串 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123",&q ...

  8. matlab中imfinfo 有关图形文件的信息

    来源:https://ww2.mathworks.cn/help/matlab/ref/imfinfo.html?searchHighlight=imfinfo&s_tid=doc_srcht ...

  9. Eating Peach (peach)

    Description On this day, the little monkey went looking for food. He came to a rectangular peach gar ...

  10. java中break、continue、return作用

    java中break.continue.return作用 0.首先要明确:break和continue是作用对象是循环体:而return的作用对象是方法 break:在执行完本次循环后,跳出所在的循环 ...