news 2026/4/20 14:47:53

2.Vue.day2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2.Vue.day2

一.指令补充

  1. 指令修饰符

  2. v-bind对于style操作的增强

  3. v-model应用于其他表单元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> textarea { display: block; width: 240px; height: 100px; margin: 10px 0; } </style> </head> <body> <div id="app"> <h3>小黑学习网</h3> 姓名: <input type="text" v-model="username"> <br><br> 是否单身: <input type="checkbox" v-model="isSingle"> <br><br> <!-- 前置理解: 1. name: 给单选框加上 name属性可以分组→同一组互相会互斥 2.value:给单选框加上value属性,用于提交给后台的数据 结合Vue使用→v-model --> 性别: <input v-model="gender" type="radio" name="gender" value="male">男 <input v-model="gender" type="radio" name="gender" value="female">女 <br><br> <!-- 前置理解: 1.option需要设置value值,提交给后台 2.select的value值,关联了选中的option 的 value 值 结合Vue使用→v-model --> 所在城市: <select v-model="cityId"> <option value="101">北京</option> <option value="102">上海</option> <option value="103">成都</option> <option value="104">南京</option> </select> <br><br> 自我描述: <textarea v-model="desc"></textarea> <button>立即注册</button> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> const app = new Vue({ el: '#app', data: { username:'', isSingle:false, gender:'female', cityId:'102', desc:"" } }) </script> </body> </html>

二.computed计算属性

  1. 基础语法

  2. 计算属性vs方法

  3. 完整写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> 姓:<input type="text" v-model="firstName"><br> 名:<input type="text" v-model="lastName"><br> <p>姓名:{{fullName}}</p> <button @click="changeName">修改姓名</button> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> const app = new Vue({ el: '#app', data: { firstName:'刘', lastName:'备' }, methods: { changeName(){ this.fullName='吕小布' } }, computed: { //简写->获取 没有配置设置的逻辑 // fullName(){ // return this.firstName+this.lastName // } //完整写法-》获取+设置 fullName:{ //(1)当fullName计算属性 被获取求值时 执行get(有缓存) //会将返回值作为,求值的结果 get(){ return this.firstName+this.lastName }, //(2)当fullName计算属性 被修改赋值时 执行set //修改的值 传递给set的形参 set(value){ // console.log(value) // console.log(value.slice(0,1)); // console.log(value.slice(1)); this.firstName=value.slice(0,1) this.lastName=value.slice(1) } } } }) </script> </body> </html>

三.watch侦听器

  1. 基础语法

  2. 完整写法

四.综合案例:水果购物车

渲染/删除/修改数量/全选反选/统计总价/持久化

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="./css/inputnumber.css" /> <link rel="stylesheet" href="./css/index.css" /> <title>购物车</title> </head> <body> <div class="app-container" id="app"> <!-- 顶部banner --> <div class="banner-box"><img src="http://autumnfish.cn/static/fruit.jpg" alt="" /></div> <!-- 面包屑 --> <div class="breadcrumb"> <span>🏠</span> / <span>购物车</span> </div> <!-- 购物车主体 --> <div class="main" v-if="fruitList.length>0"> <div class="table"> <!-- 头部 --> <div class="thead"> <div class="tr"> <div class="th">选中</div> <div class="th th-pic">图片</div> <div class="th">单价</div> <div class="th num-th">个数</div> <div class="th">小计</div> <div class="th">操作</div> </div> </div> <!-- 身体 --> <div class="tbody"> <div v-for="(item,index) in fruitList" :key="item.id" class="tr" :class="{active:item.isChecked}"> <div class="td"><input type="checkbox" v-model="item.isChecked"/></div> <div class="td"><img :src="item.icon" alt="" /></div> <div class="td">{{item.price}}</div> <div class="td"> <div class="my-input-number"> <button :disabled="item.num<=1" class="decrease" @click="sub(item.id)"> - </button> <span class="my-input__inner">{{item.num}}</span> <button class="increase" @click="add(item.id)"> + </button> </div> </div> <div class="td">{{item.num*item.price}}</div> <div class="td"><button @click="del(item.id)">删除</button></div> </div> </div> </div> </div> <!-- 底部 --> <div class="bottom"> <!-- 全选 --> <label class="check-all"> <input type="checkbox" v-model="isAll"/> 全选 </label> <div class="right-box"> <!-- 所有商品总价 --> <span class="price-box">总价&nbsp;&nbsp;:&nbsp;&nbsp;¥&nbsp;<span class="price">{{totalPrice}}</span></span> <!-- 结算按钮 --> <button class="pay">结算( {{totalCount}} )</button> </div> </div> </div> <!-- 空车 --> <div class="empty" v-else>🛒空空如也</div> </div> <script src="../vue.js"></script> <script> const defaultArr= [ { id: 1, icon: 'http://autumnfish.cn/static/火龙果.png', isChecked: true, num: 2, price: 6, }, { id: 2, icon: 'http://autumnfish.cn/static/荔枝.png', isChecked: false, num: 7, price: 20, }, { id: 3, icon: 'http://autumnfish.cn/static/榴莲.png', isChecked: false, num: 3, price: 40, }, { id: 4, icon: 'http://autumnfish.cn/static/鸭梨.png', isChecked: true, num: 10, price: 3, }, { id: 5, icon: 'http://autumnfish.cn/static/樱桃.png', isChecked: false, num: 20, price: 34, }, ], const app = new Vue({ el: '#app', data: { // 水果列表 fruitList:JSON.parse(localStorage.getItem('list'))||defaultArr }, computed:{ //默认计算属性,只能获取不能设置,要设置完整写法 // isAll(){ // //必须所有的小选框都选中 全选按钮才选中-> every // return this.fruitList.every(item=>item.isChecked) // } //完整写法 isAll:{ get(){ return this.fruitList.every(item=>item.isChecked) }, set(value){ // console.log(value); //基于拿到的布尔值 要让所有的小选框 同步状态 this.fruitList.forEach(item=>item.isChecked=value) } }, //统计选中的总数 reduce totalCount(){ return this.fruitList.reduce((sum,item)=>{ if(item.isChecked){ //选中->需要累加 return sum+item.num }else{ //没选中 return sum } },0) }, totalPrice(){ return this.fruitList.reduce((sum,item)=>{ if(item.isChecked){ return sum+(item.num*item.price) } else{ return sum } },0) } }, methods:{ del(id){ this.fruitList=this.fruitList.filter(item=>item.id!=id) }, add(id){ //1.根据id找到数组里的对应项->find const fruit=this.fruitList.find(item=>item.id===id) //2.操作num数量 fruit.num++ }, sub(id){ const fruit=this.fruitList.find(item=>item.id===id) //2.操作num数量 fruit.num-- } }, watch:{ fruitList:{ deep:true, handler(newValue){ //需要将变化后的newValue存入本地 localStorage.setItem('list',JSON.stringify(newValue)) } } } }) </script> </body> </html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:20:26

实测YOLOv13与YOLOv8对比,精度提升明显

实测YOLOv13与YOLOv8对比&#xff0c;精度提升明显 在目标检测工程实践中&#xff0c;一个常被忽视却影响深远的问题是&#xff1a;模型升级带来的真实收益是否值得投入&#xff1f; 你可能已经熟练部署了 YOLOv8&#xff0c;它稳定、文档完善、社区支持丰富&#xff1b;但当 …

作者头像 李华
网站建设 2026/4/10 18:51:52

探索Unreal引擎游戏存档编辑全攻略

探索Unreal引擎游戏存档编辑全攻略 【免费下载链接】uesave-rs 项目地址: https://gitcode.com/gh_mirrors/ue/uesave-rs 你是否真正了解游戏存档背后的秘密&#xff1f; 在游戏世界中&#xff0c;存档文件就像是时光胶囊&#xff0c;记录着我们的每一次冒险和成长。但…

作者头像 李华
网站建设 2026/4/18 2:50:29

5步零基础掌握OpCore Simplify:自动生成OpenCore EFI的完全指南

5步零基础掌握OpCore Simplify&#xff1a;自动生成OpenCore EFI的完全指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款专为…

作者头像 李华
网站建设 2026/4/17 15:31:45

提示工程架构师的不传之秘:提示质量监控告警

提示工程架构师的不传之秘:如何用监控告警守住AI应用的“语言边界”? 关键词 提示工程、质量监控、告警系统、LLM应用、Prompt优化、异常检测、反馈闭环 摘要 当我们谈论LLM(大语言模型)应用的稳定性时,提示(Prompt) 是最容易被忽视的“隐形基石”。它像一把钥匙,直…

作者头像 李华
网站建设 2026/4/16 11:54:05

物联网开发平台PandaX:低代码赋能工业设备数字化转型

物联网开发平台PandaX&#xff1a;低代码赋能工业设备数字化转型 【免费下载链接】PandaX &#x1f389;&#x1f525;PandaX是Go语言开源的企业级物联网平台低代码开发基座&#xff0c;基于go-restfulVue3.0TypeScriptvite3element-Plus的前后端分离开发。支持设备管控&#x…

作者头像 李华