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、源代码

相关文章
|
21天前
|
SQL JSON 数据库
influxdb 端点使用http进行sql查询,写数据
influxdb 端点使用http进行sql查询,写数据
59 0
|
19天前
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
|
29天前
|
Web App开发 XML 缓存
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(4)-会话面板和HTTP会话数据操作详解
【7月更文挑战第19天】Fiddler会话面板概览:Fiddler的会话列表显示HTTP请求的详细信息,包括ID、状态码、协议、主机名、URL、内容类型、大小、进程及自定义备注。颜色和图标标识状态,如红色表示错误,黄色为认证,蓝色是HTML响应。用户可右键列进行搜索、标记重复、隐藏或自定义列,如添加请求方法。通过界面或脚本可添加自定义列,如显示ServerIP。会话还可复制和保存,解决乱码问题需解码响应体。
45 0
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(4)-会话面板和HTTP会话数据操作详解
|
21天前
|
JSON Java Serverless
函数计算产品使用问题之如何使用Go SDK从HTTP上下文中提取JSON数据
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
1月前
|
存储 资源调度 前端开发
JavaScript 使用axios库发送 post请求给后端, 给定base64格式的字符串数据和一些其他参数, 使用表单方式提交, 并使用onUploadProgress显示进度
使用 Axios 发送包含 Base64 数据和其他参数的 POST 请求时,可以通过 `onUploadProgress` 监听上传进度。由于整个请求体被视为一个单元,所以进度可能不够精确,但可以模拟进度反馈。前端示例代码展示如何创建一个包含 Base64 图片数据和额外参数的 `FormData` 对象,并在上传时更新进度条。后端使用如 Express 和 Multer 可处理 Base64 数据。注意,实际进度可能不如文件上传精确,显示简单加载状态可能更合适。
121 0
|
1月前
|
JavaScript
文本,前后端数据交互,简单请求,如何去给data数据赋值,在mounted()里赋值,利用axios发送的请求,res就是数据集,就是后端的数据,this.users = res.data.data
文本,前后端数据交互,简单请求,如何去给data数据赋值,在mounted()里赋值,利用axios发送的请求,res就是数据集,就是后端的数据,this.users = res.data.data
|
1月前
|
JavaScript API
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
|
1月前
|
API
前后端数据交互,API风格组合式API和选项式API,setup是一个标识,组合式编写的意思,使定义count.value的值自增的写法,组合式API使用axios的写法,ref定义响应数据写法
前后端数据交互,API风格组合式API和选项式API,setup是一个标识,组合式编写的意思,使定义count.value的值自增的写法,组合式API使用axios的写法,ref定义响应数据写法
|
3天前
|
JavaScript API
Vue中如何完成对axios的二次封装、统一接口管理
这篇文章介绍了在Vue项目中如何对axios进行二次封装,实现接口的统一管理和简化请求过程,包括创建api包、编写request.js、在main.js中引入封装好的axios以及在项目中发送请求的方法。
Vue中如何完成对axios的二次封装、统一接口管理
|
16天前
|
JavaScript 前端开发
vue引入axios出现Module parse failed: Unexpected token (5:2)
vue引入axios出现Module parse failed: Unexpected token (5:2) 页面显示 Cannot GET /

热门文章

最新文章