day06——前后端交互

一、计算属性

计算属性就是基于现有的数据推算出来的新属性,只要依赖的数据变化,新属性就会自动更新,而且计算属性多次调用的情况下只会计算一次,效率非常高

简化写法

const app = new Vue({
el: '#app',
data: {},
methods: {//跟data平级函数名(){return 计算结果} 
}, 
computed:{//跟data平级计算属性名(){return 计算结果} 
}
})

完整写法

计算属性的值默认情况下是不能直接进行修改的,如果非要修改,就必须使用计算属性的完整写法(表格全选情况会用到,下篇文章案例中会出现)

const app = new Vue({el: '#app',data: {},computed:{//跟data平级计算属性名:{get(){返回计算属性的值}set(val){提供修改的逻辑}} }
})

二、Vue周期

三、axios发送请求

四、前后端交互案例

接口文档地址: 查询我的账单列表 - 传智教育-vue基础案例接口

功能需求:

        1.基本渲染

        2.合计根据页面数据变化

        3. 添加功能

        4. 删除功能

初始代码:

<!DOCTYPE html>
<html lang="en">
​
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><!-- CSS only --><link href="./css/bootstrap.min.css" rel="stylesheet"><script src="./js/vue-2.6.12.js"></script><script src="./js/axios-0.20.0.js"></script><style>.red {color: red !important;}
​.search {width: 300px;margin: 20px 0;}
​.my-form {display: flex;margin: 20px 0;}
​.my-form input {flex: 1;margin-right: 20px;}
​.table> :not(:first-child) {border-top: none;}
​.contain {display: flex;padding: 10px;}
​.list-box {flex: 1;padding: 0 30px;}
​.list-box a {text-decoration: none;}
​.echarts-box {width: 600px;height: 400px;padding: 30px;margin: 0 auto;border: 1px solid #ccc;}
​tfoot {font-weight: bold;}
​@media screen and (max-width: 1000px) {.contain {flex-wrap: wrap;}
​.list-box {width: 100%;}
​.echarts-box {margin-top: 30px;}}</style>
</head>
​
<body><div id="app"><div class="contain"><!-- 左侧列表 --><div class="list-box">
​<!-- 添加资产 --><form class="my-form"><input type="text" class="form-control" placeholder="消费名称" /><input type="text" class="form-control" placeholder="消费价格" /><button type="button" class="btn btn-primary">添加账单</button></form>
​<table class="table table-hover"><thead><tr><th>编号</th><th>消费名称</th><th>消费价格</th><th>操作</th></tr></thead><tbody><tr><td>1</td><td>帽子</td><td>99</td><td><a href="javascript:;">删除</a></td></tr></tbody><tfoot><tr><td colspan="4">消费总计: 298.00</td></tr></tfoot></table></div></div></div><script>/*** 接口文档地址:* https://www.apifox.cn/apidoc/shared-24459455-ebb1-4fdc-8df8-0aff8dc317a8/api-53371058* * 功能需求:* 1. 基本渲染* 2. 添加功能* 3. 删除功能*/const app = new Vue({el: '#app',data: {},methods: {},created() {}})</script>
</body>
​
</html>

网页初始界面如图所示:

1、基本渲染

        (1)定义一个发送请求的查询数据的方法(在vue初始化后,渲染前执行)

        (2)查询句式:

                axios.get("地址?Query参数变量名=参数值").then(res=>{

                        res.data.data

                })

        (3)在vue对象的data{}中,定义一个数组接收数据

        (4)在html的body代码中利用v-for遍历数组数据,展现在页面上

该部分代码实现:
<tr v-for="(item,index) in orders"><td>{{item.id}}</td><td>{{item.name}}</td><td>{{item.price}}</td><td><a href="javascript:;">删除</a></td>
</tr>
<script>const app = new Vue({el: '#app',data: {orders:[]},methods: {//1、定义一个发送请求查询数据的方法findAll() {axios.get("https://applet-base-api-t.itheima.net/bill?creator=zhangsan").then(res=>{this.orders = res.data.data})}},created() {//vue初始化后,渲染之前执行this.findAll()}})
</script>

效果图:

2、合计根据页面数据变化

        (1)在vue对象中使用计算属性,实现总计效果

        (2)写一个total()方法,定义sum存储结果,遍历数组,获取每条数据的价格相加,然后返回sum

        (3)在html的body代码中,将写死的数据,换成插值表达式{{total}}

该部分代码实现:
<tr><td colspan="4">消费总计:{{total}}</td>
</tr>
<script>const app = new Vue({el: '#app',data: {orders:[]},methods: {//1、定义一个发送请求查询数据的方法findAll() {axios.get("https://applet-base-api-t.itheima.net/bill?creator=zhangsan").then(res=>{this.orders = res.data.data})}},created() {//vue初始化后,渲染之前执行this.findAll()},computed: {total(){let sum = 0this.orders.forEach(element => {sum += element.price})return sum}}})
</script>

效果图:

3、添加功能

        (1)在vue对象的data{}中,定义一个对象 saveOrder:{},用于存储要存入的数据

        (2)通过v-model双向绑定输入框与vue对象

        (3)给“添加账单”按钮绑定事件add()

        (4)在vue对象的methods{}中实现add()方法

                (a)设置账单的创建者

                (b)发送请求到服务端保存

                        添加句式:

                                axios.post("地址",添加对象).then(res=>{}

                (d)判断保存是否成功

                (e)页面的数据列表重新加载

                (f)清空输入框

该部分代码实现:
<form class="my-form"><input type="text" class="form-control" placeholder="消费名称"  v-model="saveOrder.name"/><input type="text" class="form-control" placeholder="消费价格"  v-model="saveOrder.price"/><button type="button" class="btn btn-primary" @click="add()">添加账单</button>
</form>
<script>const app = new Vue({el: '#app',data: {orders:[],saveOrder:{}},methods: {//1、定义一个发送请求查询数据的方法findAll() {axios.get("https://applet-base-api-t.itheima.net/bill?creator=zhangsan").then(res=>{this.orders = res.data.data})},add(){//设置账单的创建者this.saveOrder.creator="zhangsan"//发送请求到服务端保存axios.post("https://applet-base-api-t.itheima.net/bill",this.saveOrder).then(res=>{//判断保存是否成功if(res.data.message=="ok"){alert("添加成功")//页面的数据列表重新加载this.findAll()//清空输入框this.saveOrder={}}})}},created() {//vue初始化后,渲染之前执行this.findAll()},computed: {total(){let sum = 0this.orders.forEach(element => {sum += element.price})return sum}}})
</script>

效果图:

4、 删除功能

        (1)给“删除”按钮绑定事件del(),需要根据id删除,所以需要传入参数item.id

        (2)在vue对象的methods{}中实现del()方法

                (a)发送请求,删除数据

                        删除句式:

                                axios.delete("地址" + id).then(res=>{

                                        console.log(res)

                                 )}

                (b)判断响应的message是否ok

                (d)页面的数据列表重新加载

该部分代码实现:
<td><a href="javascript:;" @click="del(item.id)">删除</a></td>
<script>const app = new Vue({el: '#app',data: {orders:[],saveOrder:{}},methods: {//1、定义一个发送请求查询数据的方法findAll() {axios.get("https://applet-base-api-t.itheima.net/bill?creator=zhangsan").then(res=>{this.orders = res.data.data})},add(){//设置账单的创建者this.saveOrder.creator="zhangsan"//发送请求到服务端保存axios.post("https://applet-base-api-t.itheima.net/bill",this.saveOrder).then(res=>{//判断保存是否成功if(res.data.message=="ok"){alert("添加成功")//页面的数据列表重新加载this.findAll()//清空输入框this.saveOrder={}}})},del(id){//根据id删除// 发送请求,删除数据axios.delete("https://applet-base-api-t.itheima.net/bill/" + id).then(res=>{console.log(res)// 判断响应的message是否okif(res.data.message=="ok"){alert("删除成功")this.findAll()}})}},created() {//vue初始化后,渲染之前执行this.findAll()},computed: {total(){let sum = 0this.orders.forEach(element => {sum += element.price})return sum}}})
</script>

效果图:

完整代码: 

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><!-- CSS only --><link href="./css/bootstrap.min.css" rel="stylesheet"><script src="./js/vue-2.6.12.js"></script><script src="./js/axios-0.20.0.js"></script><style>.red {color: red !important;}.search {width: 300px;margin: 20px 0;}.my-form {display: flex;margin: 20px 0;}.my-form input {flex: 1;margin-right: 20px;}.table> :not(:first-child) {border-top: none;}.contain {display: flex;padding: 10px;}.list-box {flex: 1;padding: 0 30px;}.list-box a {text-decoration: none;}.echarts-box {width: 600px;height: 400px;padding: 30px;margin: 0 auto;border: 1px solid #ccc;}tfoot {font-weight: bold;}@media screen and (max-width: 1000px) {.contain {flex-wrap: wrap;}.list-box {width: 100%;}.echarts-box {margin-top: 30px;}}</style>
</head><body><div id="app"><div class="contain"><!-- 左侧列表 --><div class="list-box"><!-- 添加资产 --><form class="my-form"><input type="text" class="form-control" placeholder="消费名称"  v-model="saveOrder.name"/><input type="text" class="form-control" placeholder="消费价格"  v-model="saveOrder.price"/><button type="button" class="btn btn-primary" @click="add()">添加账单</button></form><table class="table table-hover"><thead><tr><th>编号</th><th>消费名称</th><th>消费价格</th><th>操作</th></tr></thead><tbody><tr v-for="(item,index) in orders"><td>{{item.id}}</td><td>{{item.name}}</td><td>{{item.price}}</td><td><a href="javascript:;" @click="del(item.id)">删除</a></td></tr></tbody><tfoot><tr><td colspan="4">消费总计:{{total}}</td></tr></tfoot></table></div></div></div><script>/*** 接口文档地址:* https://www.apifox.cn/apidoc/shared-24459455-ebb1-4fdc-8df8-0aff8dc317a8/api-53371058* * 功能需求:* 1. 基本渲染* 2. 添加功能* 3. 删除功能*/const app = new Vue({el: '#app',data: {orders:[],saveOrder:{}},methods: {//1、定义一个发送请求查询数据的方法findAll() {axios.get("https://applet-base-api-t.itheima.net/bill?creator=zhangsan").then(res=>{this.orders = res.data.data})},add(){//设置账单的创建者this.saveOrder.creator="zhangsan"//发送请求到服务端保存axios.post("https://applet-base-api-t.itheima.net/bill",this.saveOrder).then(res=>{//判断保存是否成功if(res.data.message=="ok"){alert("添加成功")//页面的数据列表重新加载this.findAll()//清空输入框this.saveOrder={}}})},del(id){//根据id删除// 发送请求,删除数据axios.delete("https://applet-base-api-t.itheima.net/bill/" + id).then(res=>{console.log(res)// 判断响应的message是否okif(res.data.message=="ok"){alert("删除成功")this.findAll()}})}},created() {//vue初始化后,渲染之前执行this.findAll()},computed: {total(){let sum = 0this.orders.forEach(element => {sum += element.price})return sum}}})</script>
</body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/404528.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一次生产jvm问题的排查

记录一次生产问题的排查 第一天晚上 现象 1、前援反馈页面有接口陆续出现请求超时 2、登录后台服务器top命令查看发现java进程发生高cpu占用情况 3、查看对应业务日志&#xff0c;报数据库连接等待超时-数据库连接池连接无空闲 对应处理 1、临时调大数据库连接池最大连接数限…

Chat App 项目之解析(三)

Chat App 项目介绍与解析&#xff08;一&#xff09;-CSDN博客文章浏览阅读76次。Chat App 是一个实时聊天应用程序&#xff0c;旨在为用户提供一个简单、直观的聊天平台。该应用程序不仅支持普通用户的注册和登录&#xff0c;还提供了管理员登录功能&#xff0c;以便管理员可以…

【三维重建汇总】NeRF和GS重建中,如何排除干扰物?(提升质量)

汇总最近NeRF与GS提升质量的论文 文章目录 前言一、NeRF On-the-go&#xff1a;利用不确定性落地真实世界&#xff08;CVPR24&#xff09;摘要1.DINOv2特征的不确定性预测2.NeRF中干扰物去除的不确定性3.优化4. Dilated Patch 扩大采样5.实验结果 二、Pixel-GS:像素感知的梯度密…

unity程序简易框架

1. 框架基本结构 2. 单例模式基类模块 2.1 BaseManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class BaseManager<T> where T:new() {private static T instance;public static T GetInstance(){if (instance == …

高防服务器配置要素

高防服务器配置通常包括硬件资源、网络资源、防护能力、弹性防护、清洗能力和业务支持等方面。下面将详细介绍高防服务器的配置要素&#xff0c;rak部落小编为您整理发布。 高防服务器是设计用来抵御各种网络攻击&#xff0c;特别是分布式拒绝服务(DDoS)攻击的服务器配置。这些…

伊朗通过 ChatGPT 试图影响美国大选, OpenAI 封禁多个账户|TodayAI

OpenAI 近日宣布&#xff0c;他们已经封禁了一系列与伊朗影响行动有关的 ChatGPT 账户&#xff0c;这些账户涉嫌利用该 AI 工具生成并传播与美国总统选举、以色列 – 哈马斯战争以及奥运会等相关的内容。 OpenAI 表示&#xff0c;这些账户与一个名为 “Storm-2035” 的秘密伊朗…

技术速递|Python in Visual Studio Code 2024年8月发布

排版&#xff1a;Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Python 和 Jupyter 扩展将于 2024 年 8 月发布&#xff01; 此版本包括以下公告&#xff1a; 使用 python-environment-tools 改进了 Python 发现源代码中显示的内联变量值对 Python 的 VS Code Native RE…

CentOS7下制作openssl1.1.1i RPM包并升级

OpenSSL最新漏洞 OpenSSL官方发布了拒绝服务漏洞风险通告&#xff0c;漏洞编号为CVE-2020-1971 漏洞详情 OpenSSL是一个开放源代码的软件库包&#xff0c;应用程序可以使用这个包来进行安全通信&#xff0c;避免窃听&#xff0c;同时确认另一端连接者的身份。这个包广泛被应…

LangChain深度解析:模型调用的艺术与实践

Model I/O 概述 LangChain的模型是框架中的核心&#xff0c;基于语言模型构建&#xff0c;用于开发LangChain应用。通过API调用大模型来解决问题是LangChain应用开发的关键过程。 可以把对模型的使用过程拆解成三块: 输入提示(Format)、调用模型(Predict)、输出解析(Parse) 1.…

【Kubernetes中如何对etcd进行备份和还原】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

开放式耳机哪种好用?开放式种草测评!

现在很多人都很喜欢用开放式耳机了&#xff0c;因为这种耳机非常的舒服&#xff0c;而且不会压迫我们的耳道&#xff0c;从而给到我们更健康的体验&#xff0c;但是现在开放式耳机的品牌越来越多&#xff0c;我们也越来越难选择&#xff0c;所以我们应该怎么样才能选到一款适合…

(七)Activiti-modeler中文支持

1、修改app.js&#xff0c;51行 注意第3步&#xff0c;之前已经访问过&#xff0c;缓存到cookie了&#xff0c;这里要么注释该方法&#xff0c;要么去浏览器手动删除对应cookie才能使用下面的zh-CN.json 2、i18n\en.json中添加zh-CN.json &#xff08;以下代码片断为网上获得…

【傅里叶分析】复数基础知识

【傅里叶分析】复数基础知识 复数复数的几何意义与点的对应与向量的对应 复数与极坐标辐角与辐角主值三角函数 参考文献 本文参考了网上的其他文章&#xff0c;已在文末参考文献中列出&#xff1b;如有侵权&#xff0c;请联系我删除。 复变函数是傅里叶分析的基础&#xff0c;而…

1、1.5、2.5、4、6、10平铜线可以带多大用电器?安全用电须知

现在家用铜线规格多是1、1.5、2.5、4、6平&#xff0c;那么这几种规格的导线能带多少瓦的用电器呢&#xff1f;今天小编就陪大家一起来分析一下。&#xff08;1平指的是国标导线的横截面积为1平方毫米&#xff09; 铜导线 红色用做火线&#xff0c;蓝色用做零线&#xff0c;黄…

Python中使用SQLite数据库的方法4-3

对于数据库的操作&#xff0c;主要包括“增”、“删”、“改”、“查”四种。在Python中使用SQLite数据库的方法4-1_python的sqlite怎么打开-CSDN博客和Python中使用SQLite数据库的方法4-2_python2 sqlite2-CSDN博客中实现增”、“删”和“查”三种操作。 1 带过滤条件的“查”…

深度学习基础—学习率衰减与局部最优问题

1.学习率衰减 下图中&#xff0c;蓝色的线是min-batch梯度下降法过程中较大学习率的的优化路径&#xff0c;绿线是较小学习率的优化路径。 如果使用min-batch梯度下降法&#xff0c;在模型的学习过程中&#xff0c;会有很多噪声&#xff0c;在靠近最小值的时候&#xff0c;由于…

测试用例的设计

*涉及概念来源于《软件测试的艺术》 目录 一、为什么要设计测试用例&#xff1f; 二、黑盒测试与白盒测试介绍 三、测试用例常见设计方法 1.黑盒测试(功能测试) 2.白盒测试(结构测试) 四、测试策略 五、测试用例怎么写 一、为什么要设计测试用例&#xff1f; 由于时间…

美国云服务器租赁多少钱一个月?

美国云服务器租赁大致价格区间为70元/月至数千元/月。不同的云服务器提供商&#xff0c;其定价策略和服务质量各不相同&#xff0c;导致价格存在差异。配置越高&#xff0c;价格自然越高。带宽越高、流量越大&#xff0c;费用通常也越高。另外&#xff0c;数据中心位置和服务水…

JVM 内存区域

一、JVM 简介 【概述】 JVM是Java虚拟机&#xff08;Java Virtual Machine&#xff09;的简称&#xff0c;是一种用于计算设备的规范&#xff0c;是一个虚构出来的计算机&#xff0c;通过在实际的计算机上仿真模拟各种计算机功能来实现的。我们学习使用的基本都是HotSpot虚拟…

学习node.js 二 path模块,os模块,process

目录 path模块 1. path.basename() 2. path.dirname 3. path.extname 4. path.join 5. path.resolve 6. path.parse path.format OS模块 1. 获取操作系统的一些信息 &#xff08;1&#xff09;os.platform() &#xff08;2)os.release &#xff08;3&#xff09;os.ho…