• Vue基础(七)——数据交互(Ajax)


    一、知识点回顾

    1、http协议:前端(浏览器)发送请求,服务器给予相应。

    2、请求方法:get(查询)、post(添加)、put(修改)、delete(删除)

    3、ajax:不刷新页面与后台交互数据

    4、axios:封装好的ajax模块

    5、koa:基于node的web框架

    二、两个项目:

    1、前端Vue(example01),用的是8080端口

    App.vue:

    1. <template>
    2. <div id="app">
    3. <form action="">
    4. <input type="text" v-model="fruit">
    5. <button>添加button>
    6. form>
    7. <ul>
    8. <li>香蕉
    9. <button>删除button>
    10. li>
    11. ul>
    12. div>
    13. template>
    14. <script>
    15. import axios from "axios";
    16. export default {
    17. data() {
    18. return {
    19. fruit: "",
    20. fruitList: [],
    21. };
    22. },
    23. methods: {
    24. getFruitList() {
    25. axios.get("http://127.0.0.1:3000/fruits").then((res) => {
    26. console.log(res.data);
    27. });
    28. },
    29. },
    30. created() {
    31. this.getFruitList();
    32. },
    33. };
    34. script>

    2、后台(example02)用的是3000端口

    因为是两个服务器,所以涉及到跨域问题。

    需要提前下载好模块: 

    1. cnpm install --save koa
    2. cnpm install --save koa-parser
    3. cnpm install --save koa-router
    4. cnpm install --save koa2-cors

    serve.js:

    1. const Koa = require("koa");
    2. //post请求模块
    3. const parser = require("koa-parser");
    4. //设置路由
    5. const router = require("koa-router")();
    6. ///允许跨域
    7. const cors = require('koa2-cors');
    8. const app = new Koa();
    9. app.use(cors());
    10. app.use(parser());
    11. app.use(router.routes());
    12. //模拟数据库
    13. const fruitList = ["香蕉", "苹果", "鸭梨"];
    14. //get方法:获取水果列表
    15. router.get("/fruits", async ctx => {
    16. ctx.body = fruitList;
    17. })
    18. //post方法:添加水果
    19. router.post("/fruits", async ctx => {
    20. let fruit = ctx.request.body.fruit;
    21. fruitList.push(fruit);
    22. ctx.body = true;
    23. })
    24. //delete方法:删除水果列表
    25. router.delete("/fruits/:index", async ctx => {
    26. let index = ctx.params.index;
    27. fruitList.splice(index, 1);
    28. ctx.body = true;
    29. })
    30. app.listen(3000, () => {
    31. console.log("server is running")
    32. })

    使用【nodemon serve.js】运行后台的js文件。

    3、查看效果

    http://localhost:8080/ 

     

    三、完整项目:(查、增、删)

    修改App.vue:

    1. <template>
    2. <div id="app">
    3. <form @submit.prevent="postData">
    4. <input type="text" v-model="fruit">
    5. <button>添加button>
    6. form>
    7. <ul>
    8. <li v-for="item,index of fruitList" :key="index">
    9. {{item}}
    10. <button @click="del(index)">删除button>
    11. li>
    12. ul>
    13. div>
    14. template>
    15. <script>
    16. import axios from "axios";
    17. export default {
    18. data() {
    19. return {
    20. fruit: "",
    21. fruitList: [],
    22. };
    23. },
    24. methods: {
    25. //获取数据
    26. getFruitList() {
    27. axios.get("http://127.0.0.1:3000/fruits").then((res) => {
    28. this.fruitList = res.data;
    29. });
    30. },
    31. //添加数据
    32. postData() {
    33. axios.post("http://127.0.0.1:3000/fruits", {
    34. fruit: this.fruit,
    35. }).then(this.getFruitList());
    36. },
    37. //删除数据
    38. del(index){
    39. axios.delete(`http://127.0.0.1:3000/fruits/${index}`).then(this.getFruitList())
    40. }
    41. },
    42. created() {
    43. this.getFruitList();
    44. },
    45. };
    46. script>

    res用不了,不知道什么情况。就必须每次都手动刷新浏览器。

     

  • 相关阅读:
    Vue 常用修饰符
    外包干了五年,废了...
    互联网的成功和端到端原则
    Win10找不到hosts文件的解决方案
    muduo库剖析(2)
    设计文档的Excel转换为对象结构POJO-简式尺规工具箱
    范式建模&维度建模 及结合BW的一些理解
    解决Android App 每启动一个Activity就看上去多启动一个应用/进程的问题
    dreamweaver作业静态HTML网页设计——摩尔庄园7页HTML+CSS+JS DW大学生网页作业制作设计 Dreamweaver简单网页
    【Docker】Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维概念的详细讲解
  • 原文地址:https://blog.csdn.net/qq_41523175/article/details/124563156