9、数据双向绑定(v-model)、前后数据交互(http、axios、router)

简介: 9、数据双向绑定(v-model)、前后数据交互(http、axios、router)

1、通过v-model指令在文本输入框中创建双向数据绑定


表单元素类型 作用
select 选项
raido 单选框
checkbox 复选框


<template>
  <div id="app">
    <!-- 1、ajax实现表单的提交 -->
    <form @submit.prevent="postData">
      <div>
        <label for="">用户名</label>
        <input type="text" v-model="formData.username" />
      </div>
      <div>
        <label for="">密码:</label>
        <input type="password" v-model="formData.password" />
      </div>
      <!-- select选项 -->
      <div>
        <label for="">爱好:</label>
        <select v-model="formData.hobby">
          <option value="painting">画画</option>
          <option value="running">跑步</option>
        </select>
      </div>
      <!-- raido单选框 -->
      <div>
        <label for="">性别:</label>
        <label for="">男</label>
        <input type="radio" value="男" v-model="formData.sex" />
        <label for="">女</label>
        <input type="radio" value="女" v-model="formData.sex" />
      </div>
      <!-- checkbox复选框 -->
      <div>
        <label for="">技能:</label>
        <label for="">Html</label>
        <input type="checkbox" value="Html" v-model="formData.skill" />
        <label for="">Css</label>
        <input type="checkbox" value="Css" v-model="formData.skill" />
        <label for="">Javascript</label>
        <input type="checkbox" value="Javascript" v-model="formData.skill" />
        <label for="">Vue</label>
        <input type="checkbox" value="Vue" v-model="formData.skill" />
      </div>
      <button>提交表单</button>
    </form>
  </div>
</template>
<script>
export default {
  data() {
    return {
      formData: {
        username: "",
        password: "",
        hobby: "",
        sex: "",
        skill: [],
      },
    };
  },
  methods: {
    postData() {
      console.log(
        this.formData.username,
        this.formData.password,
        this.formData.hobby,
        this.formData.sex,
        this.formData.skill
      );
    },
  },
};
</script>
<style></style>

2、数据交互(查询、添加、删除)


http协议:前端(浏览器)发出请求,服务器给予响应

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

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

axios:封装好的ajax模块

koa:基于node的web框架


1863069cc59947e48466239e852943a9.png


App.vue:

<template>
  <div id="app">
    <!-- 1、ajax实现表单的提交 -->
    <div class="case1">
      <form @submit.prevent="postData">
        <div>
          <label for="">用户名</label>
          <input type="text" v-model="formData.username" />
        </div>
        <div>
          <label for="">密码:</label>
          <input type="password" v-model="formData.password" />
        </div>
        <!-- select选项 -->
        <div>
          <label for="">爱好:</label>
          <select v-model="formData.hobby">
            <option value="painting">画画</option>
            <option value="running">跑步</option>
          </select>
        </div>
        <!-- raido单选框 -->
        <div>
          <label for="">性别:</label>
          <label for="">男</label>
          <input type="radio" value="男" v-model="formData.sex" />
          <label for="">女</label>
          <input type="radio" value="女" v-model="formData.sex" />
        </div>
        <!-- check复选框 -->
        <div>
          <label for="">技能:</label>
          <label for="">Html</label>
          <input type="checkbox" value="Html" v-model="formData.skill" />
          <label for="">Css</label>
          <input type="checkbox" value="Css" v-model="formData.skill" />
          <label for="">Javascript</label>
          <input type="checkbox" value="Javascript" v-model="formData.skill" />
          <label for="">Vue</label>
          <input type="checkbox" value="Vue" v-model="formData.skill" />
        </div>
        <button>提交表单</button>
      </form>
    </div>
    <!-- 案例二:提交数据 -->
    <div class="case2">
      <form @submit.prevent="postUserList">
        <label for="">用户名</label>
        <input type="text" v-model="user" />
        <button>提交表单</button>
      </form>
      <table border="1px;">
        <thead>
          <th>用户名</th>
          <th>操作</th>
        </thead>
        <tbody>
          <tr v-for="(value, index) of userList" :key="index">
            <td>{{ value }}</td>
            <td><button @click="deleteUserList(index)">删除</button></td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</template>
<script>
import axios from "axios";
export default {
  created() {
    this.getUserList();
  },
  data() {
    return {
      // 案例一:v-model数据交互
      formData: {
        username: "",
        password: "",
        hobby: "",
        sex: "",
        skill: [],
      },
      // 案例二:提交数据
      user: "",
      userList: [],
    };
  },
  methods: {
    // 案例一:v-model数据交互
    postData() {
      console.log(
        this.formData.username,
        this.formData.password,
        this.formData.hobby,
        this.formData.sex,
        this.formData.skill
      );
    },
    // 案例二:提交数据
    // 1、查询用户列表
    getUserList() {
      axios.get("http://127.0.0.1:3000/user").then((res) => {
        this.userList = res.data;
      });
    },
    // 2、添加用户列表
    postUserList() {
      axios
        .post("http://127.0.0.1:3000/user", { user: this.user })
        .then((res) => {
          console.log(res.data);
          this.getUserList();
        });
    },
    // 3、删除用户列表
    deleteUserList(index) {
      axios.delete(`http://127.0.0.1:3000/user/${index}`).then((res) => {
        console.log(res.data);
        this.getUserList();
      });
    },
  },
};
</script>
<style>
#app {
  display: flex;
  justify-content: space-around;
}
</style>

server.js:

const Koa = require('koa');
// 获取post请求数据
const parser = require('koa-parser');
// 设置路由
const Router = require('koa-router')
const router = new Router();
// 允许跨域
const cors = require("koa2-cors");
const app = new Koa();
// 引入中间键
app.use(cors({
  origin: function (ctx) {
    // return "*"; // 允许来自所有域名请求
    // return ctx.header.origin;// 当*无法使用时,使用这句,同样允许所有跨域
    // return 'http://localhost:8080'; //单个跨域请求
    // 允许多个跨域
    var allowCors = ['http://localhost:8080', 'http://localhost:8081'];
    return allowCors.indexOf(ctx.header.origin) > -1 ? ctx.header.origin : '';
  },
  exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
  maxAge: 5,
  credentials: true,
  allowMethods: ['GET', 'POST', 'DELETE'],
  allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}))
app.use(parser());
app.use(router.routes());
// 模拟数据
const userList = ["jasmine", "jasmine_qiqi", "qiqi"];
// get方法:获取userList列表
router.get("/user", async ctx => {
  ctx.body = userList;
})
// post方法:添加user信息
router.post("/user", async ctx => {
  // request:请求响应数据
  let user = ctx.request.body.user;
  userList.push(user);
  ctx.body = true;
})
// delete方法:删除user信息列表
router.delete("/user/:index", async ctx => {
  let index = ctx.params.index;
  // splice:删除行
  userList.splice(index, 1);
  ctx.body = true;
})
app.listen(3000, () => {
  console.log("server is running...")
})


3、axios:封装好的ajax模块


下载axios:cnpm install --save axios

引入axios:import axios from "axios";

下载sever.js:npm install server

开启sever.js:nodemon ./sever.js

下载XXX:npm install XXX


4、源代码

相关文章
|
14天前
|
资源调度 JavaScript
|
12天前
|
JSON JavaScript 前端开发
axios的post请求,数据为什么要用qs处理?什么时候不用?
axios的post请求,数据为什么要用qs处理?什么时候不用?
|
29天前
|
存储 JSON Go
在Gin框架中优雅地处理HTTP请求体中的JSON数据
在Gin框架中优雅地处理HTTP请求体中的JSON数据
|
1月前
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求
|
2月前
|
数据采集 缓存 IDE
Go中遇到http code 206和302的获取数据的解决方案
文章提供了解决Go语言中处理HTTP状态码206(部分内容)和302(重定向)的方案,包括如何获取部分数据和真实请求地址的方法,以便程序员能快速完成工作,享受七夕时光。
105 0
Go中遇到http code 206和302的获取数据的解决方案
|
1月前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
113 0
|
3月前
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
|
2月前
|
移动开发 JavaScript 前端开发
"解锁axios GET请求新姿势!揭秘如何将数组参数华丽变身,让你的HTTP请求在云端翩翩起舞,挑战技术极限!"
【8月更文挑战第20天】二维码在移动应用中无处不在。本文详述了在UniApp H5项目中实现二维码生成与扫描的方法。通过对比插件`uni-app-qrcode`和库`qrcode-generator`生成二维码,以及使用插件和HTML5 API进行扫描,帮助开发者挑选最佳方案。无论是即插即用的插件还是灵活的JavaScript实现,都能满足不同需求。
34 0
|
3月前
|
JSON Java Serverless
函数计算产品使用问题之如何使用Go SDK从HTTP上下文中提取JSON数据
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
JavaScript 前端开发
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
这篇文章主要讨论了axios的使用、原理以及源码分析。 文章中首先回顾了axios的基本用法,包括发送请求、请求拦截器和响应拦截器的使用,以及如何取消请求。接着,作者实现了一个简易版的axios,包括构造函数、请求方法、拦截器的实现等。最后,文章对axios的源码进行了分析,包括目录结构、核心文件axios.js的内容,以及axios实例化过程中的配置合并、拦截器的使用等。
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?