Vue 1.26

一、指令补充

1.指令修饰符

(1)按键修饰符

@keyup.enter→ 键盘回车监听

<body> <div id="app"> <h3>@keyup.enter => 监听键盘回车事件</h3> <input @keyup.enter="fn" v-model="username" type="text"> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el: '#app', data: { username: '' }, methods: { fn (e) { if(e.key === 'enter') { console.log('键盘回车的时候触发', this.username) } } } }) </script> </body>

(2)v-model修饰符

(3)事件修饰符

<div id="app"> <h3>v-model修饰符 .trim .number</h3> 姓名:<input v-model.trim="username" type="text"><br> 年纪:<input v-model.number="age" type="text"><br> <h3>@事件名.stop → 阻止冒泡</h3> <div @click="fatherFn" class="father"> <div @click.stop="sonFn" class="son">儿子</div> </div> <h3>@事件名.prevent → 阻止默认行为</h3> <a @click.prevent href="http://www.baidu.com">阻止默认行为</a> </div> <script src="./vue.js"></script> <script> const app = new Vue({ el: '#app', data: { username: '', age: '', }, methods: { fatherFn () { alert('老父亲被点击了') }, sonFn () { alert('儿子被点击了') } } }) </script>

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

(1)操作class

语法:class = "对象/数组"

<style> .box { width: 200px; height: 200px; border: 3px solid #000; font-size: 30px; margin-top: 10px; } .pink { background-color: pink; } .big { width: 300px; height: 300px; } </style> <body> <div id="app"> <div class="box" :class="{ pink: false, big: true}">黑马程序员</div> <div class="box" :class="['pink', 'big']">黑马程序员</div> </div> <script src="./vue.js"></script> <script> const app = new Vue({ el: '#app', data: { } }) </script> </body>

(2)操作style

语法:style = "样式对象"

适用场景:某个具体属性的动态设置

<style> .box { width: 200px; height: 200px; background-color: rgb(187, 150, 156); } </style> <body> <div id="app"> <div class="box" :style="{ width: '400px', height: '400px', backgroundColor: 'skyblue'}"></div> </div> <script src="./vue.js"></script> <script> const app = new Vue({ el: '#app', data: { } }) </script> </body>

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

<style> textarea { display: block; width: 240px; height: 100px; margin: 10px 0; } </style> <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="1">男 <input v-model="gender" type="radio" name="gender" value="2">女 <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="./vue.js"></script> <script> const app = new Vue({ el: '#app', data: { username: '', isSingle: true, gender: "2", cityId: '102', desc: "" } }) </script> </body>

二、computed 计算属性

1.计算属性

(1)定义:基于现有的数据,计算出来的新属性依赖的数据变化,自动重新计算。

(2)语法:

<style> table { border: 1px solid #000; text-align: center; width: 240px; } th,td { border: 1px solid #000; } h3 { position: relative; } </style> <body> <div id="app"> <h3>小黑的礼物清单</h3> <table> <tr> <th>名字</th> <th>数量</th> </tr> <tr v-for="(item, index) in list" :key="item.id"> <td>{{ item.name }}</td> <td>{{ item.num }}个</td> </tr> </table> <!-- 目标:统计求和,求得礼物总数 --> <p>礼物总数:{{ totalCount}} 个</p> </div> <script src="./vue.js"></script> <script> const app = new Vue({ el: '#app', data: { // 现有的数据 list: [ { id: 1, name: '篮球', num: 1 }, { id: 2, name: '玩具', num: 2 }, { id: 3, name: '铅笔', num: 5 }, ] }, computed: { totalCount () { // 基于现有的数据,编写求值逻辑 // 计算属性函数内部,可以直接通过 this 访问到 app 实例 // console.log(this.list) // 需求:对 this.list 数组里面的 num 进行求和 => reduce let total = this.list.reduce((sum, item) => sum + item.num, 0) return total } } }) </script> </body>

2.computed计算属性 与methods方法

(1)计算属性

(2)方法

<style> table { border: 1px solid #000; text-align: center; width: 300px; } th,td { border: 1px solid #000; } h3 { position: relative; } span { position: absolute; left: 145px; top: -4px; width: 16px; height: 16px; color: white; font-size: 12px; text-align: center; border-radius: 50%; background-color: #e63f32; } </style> <body> <div id="app"> <h3>小黑的礼物清单🛒<span>{{ totalCount }}</span></h3> <table> <tr> <th>名字</th> <th>数量</th> </tr> <tr v-for="(item, index) in list" :key="item.id"> <td>{{ item.name }}</td> <td>{{ item.num }}个</td> </tr> </table> <p>礼物总数:{{ totalCount }} 个</p> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> const app = new Vue({ el: '#app', data: { // 现有的数据 list: [ { id: 1, name: '篮球', num: 3 }, { id: 2, name: '玩具', num: 2 }, { id: 3, name: '铅笔', num: 5 }, ] }, computed: { // 计算属性:有缓存的,一旦计算出来啊结果,就会立刻缓存 // 下次读取 => 直接读缓存执行 => 性能特别高 totalCount () { console.log('计算属性执行了') let total = this.list.reduce((sum, item) => sum + item.num, 0) return total } } }) </script> </body>

3.计算属性完整写法

语法:

<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: '太狼', }, computed: { // 简写 => 获取 // fullName () { // return this.firstName + this.lastName // } // 完整写法 => 获取 + 设置 fullName: { // (1)当fullName计算属性,被获取求值时,执行get (有缓存,优先读缓存) // 会将返回值作为最终的求值结果 get () { return this.firstName + this.lastName }, // (2)当fullName计算属性,被修改赋值时,执行set // 修改的值,传递给set 方法的形参 set (value) { this.firstName = value.slice(0, 1) this.lastName = value.slice(1) } } }, methods: { changeName () { this.fullName = '红太狼' } } }) </script>

4.综合案例

三、watch侦听器

1.作用:监视数据变化,执行一些 业务逻辑或异步操作。

2.语法:

(1)简单写法

<style> * { margin: 0; padding: 0; box-sizing: border-box; font-size: 18px; } #app { padding: 10px 20px; } .query { margin: 10px 0; } .box { display: flex; } textarea { width: 300px; height: 160px; font-size: 18px; border: 1px solid #dedede; outline: none; resize: none; padding: 10px; } textarea:hover { border: 1px solid #1589f5; } .transbox { width: 300px; height: 160px; background-color: #f0f0f0; padding: 10px; border: none; } .tip-box { width: 300px; height: 25px; line-height: 25px; display: flex; } .tip-box span { flex: 1; text-align: center; } .query span { font-size: 18px; } .input-wrap { position: relative; } .input-wrap span { position: absolute; right: 15px; bottom: 15px; font-size: 12px; } .input-wrap i { font-size: 20px; font-style: normal; } </style> <body> <div id="app"> <!-- 条件选择框 --> <div class="query"> <span>翻译成的语言:</span> <select> <option value="italy">意大利</option> <option value="english">英语</option> <option value="german">德语</option> </select> </div> <!-- 翻译框 --> <div class="box"> <div class="input-wrap"> <textarea v-model="obj.words"></textarea> <span><i>⌨️</i>文档翻译</span> </div> <div class="output-wrap"> <div class="transbox">{{ result }}</div> </div> </div> </div> <script src="./vue.js"></script> <script src="./axios.js"></script> <script> // 接口地址:https://applet-base-api-t.itheima.net/api/translate // 请求方式:get // 请求参数: // (1)words:需要被翻译的文本(必传) // (2)lang:需要翻译成的语言(可选)默认值-意大利 const app = new Vue({ el: '#app', data: { // words: '', obj: { words: '' }, result: '', // 翻译结果 // timer: null // 延时器id }, // 具体讲解:(1) watch语法 (2) 具体业务实现 watch: { // 该方法会在我数据变化时调用执行 // newValue新值,oldValue老值(一般不用) // words (newValue) { // console.log('变化了', newValue) // } 'obj.words' (newValue) { // console.log('变化了', newValue) // 防抖:延迟执行 => 干啥事先等一等,延迟一会,一段时间内没有再次触发,才执行 clearTimeout(this.timer) this.timer = setTimeout(async () => { const res = await axios({ url: 'https://applet-base-api-t.itheima.net/api/translate', params: { words: newValue } }, 300) this.result = res.data.data }) } } }) </script> </body>

(2)完整写法 → 添加额外配置项

<style> * { margin: 0; padding: 0; box-sizing: border-box; font-size: 18px; } #app { padding: 10px 20px; } .query { margin: 10px 0; } .box { display: flex; } textarea { width: 300px; height: 160px; font-size: 18px; border: 1px solid #dedede; outline: none; resize: none; padding: 10px; } textarea:hover { border: 1px solid #1589f5; } .transbox { width: 300px; height: 160px; background-color: #f0f0f0; padding: 10px; border: none; } .tip-box { width: 300px; height: 25px; line-height: 25px; display: flex; } .tip-box span { flex: 1; text-align: center; } .query span { font-size: 18px; } .input-wrap { position: relative; } .input-wrap span { position: absolute; right: 15px; bottom: 15px; font-size: 12px; } .input-wrap i { font-size: 20px; font-style: normal; } </style> <body> <div id="app"> <!-- 条件选择框 --> <div class="query"> <span>翻译成的语言:</span> <select v-model="obj.lang"> <option value="italy">意大利</option> <option value="english">英语</option> <option value="german">德语</option> </select> </div> <!-- 翻译框 --> <div class="box"> <div class="input-wrap"> <textarea v-model="obj.words"></textarea> <span><i>⌨️</i>文档翻译</span> </div> <div class="output-wrap"> <div class="transbox">{{ result }}</div> </div> </div> </div> <script src="./vue.js"></script> <script src="./axios.js"></script> <script> // 需求:输入内容,修改语言,都实时翻译 // 接口地址:https://applet-base-api-t.itheima.net/api/translate // 请求方式:get // 请求参数: // (1)words:需要被翻译的文本(必传) // (2)lang:需要翻译成的语言(可选)默认值-意大利 const app = new Vue({ el: '#app', data: { // words: '', obj: { words: '小黑', lang: 'italy' }, result: '', // 翻译结果 }, // 具体讲解:(1) watch语法 (2) 具体业务实现 watch: { obj: { deep: true, // 深度监视 immediate: true, // 立刻执行,一进页面handler就立刻执行 handler (newValue) { clearTimeout(this.timer) this.timer = setTimeout(async () => { const res = await axios({ url: 'https://applet-base-api-t.itheima.net/api/translate', params: newValue }, 300) this.result = res.data.data }) } } // 'obj.words' (newValue) { // clearTimeout(this.timer) // this.timer = setTimeout(async () => { // const res = await axios({ // url: 'https://applet-base-api-t.itheima.net/api/translate', // params: { // words: newValue // } // }, 300) // this.result = res.data.data // }) // } } }) </script> </body>

四、综合案例

五、生命周期

1.生命周期 & 生命周期四个阶段

2.生命周期钩子

3.综合案例

<body> <div id="app"> <h3>{{ title }}</h3> <div> <button @click="count--">-</button> <span>{{ count }}</span> <button @click="count++">+</button> </div> </div> <script src="./vue.js"></script> <script> const app = new Vue({ el: '#app', data: { count: 100, title: '计数器' }, // 1. 创建阶段(准备数据) beforeCreate () { console.log('beforecreate 响应式数据准备好之前', this.count) }, created () { console.log('created 响应式数据准备好之后', this.count) // this.数据名 = 请求回来的数据 // 可以开始发送初始化渲染的请求了 }, // 2. 挂载阶段(渲染模板) beforeMount () { console.log('beforemount 模板渲染之前', document.querySelector('h3').innerHTML) }, mounted () { console.log('mounted 模板渲染之后', document.querySelector('h3').innerHTML) // 可以开始操作dom了 }, // 3.更新阶段(修改数据 => 更新视图) beforeUpdate () { console.log('beforeUpdate 数据修改了,视图还没更新', document.querySelector('span').innerHTML) }, updated () { console.log('updated 数据修改了,视图已经更新', document.querySelector('span').innerHTML) }, // 4.卸载阶段 beforeDestroy () { console.log('beforeDestroy 卸载前') console.log('清除掉一些Vue以外的资源占用,定时器,延时器···') }, destroyed () { console.log('destroyed 卸载后') } }) </script> </body>

六、综合案例

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

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

相关文章

一站式指南:Obsidian Typora 统一写作规范与存量内容迁移实战

一站式指南:Obsidian & Typora 统一写作规范与存量内容迁移实战 引言 在内容创作领域,选择合适的写作工具和遵循统一的规范是提升效率和保证质量的关键。然而,许多创作者在使用 Obsidian 和 Typora 进行 Markdo…

UnicodeDecodeError: ‘charmap‘ codec can‘t decode byte 0x81 in position 17: character maps to <undefi

目录 问题原因分析1. **编码不匹配**2. **常见场景** 解决方案**方案1&#xff1a;设置正确的字符集连接MySQL****方案2&#xff1a;Python脚本中的解决方案****方案3&#xff1a;检查并设置系统环境编码****方案4&#xff1a;MySQL服务器端配置检查****方案5&#xff1a;在代码…

golang中使用 sort.Interface 实现复杂多级排序

举两个例子&#xff0c;说明 sort.Interface实现多级排序。 例子 1 学生成绩排序&#xff08;先按成绩降序&#xff0c;成绩相同按姓名升序&#xff09;package mainimport ("fmt""sort")type Student struct {Name stringScore int}type ByScoreAndName …

MySQL 中的 utf8 vs utf8mb4 区别

目录核心区别详细对比1. **编码范围不同**2. **历史背景**3. **实际影响最明显的场景**4. **存储空间差异**5. **性能差异**关键限制**索引长度限制**实际使用建议1. **新项目一律使用utf8mb4**2. **现有系统迁移步骤**3. **连接配置**4. **排序规则选择**兼容性考虑**向下兼容…

指针,C语言的灵魂与噩梦:从入门到“放弃”的终极指南 [特殊字符]

深入理解指针&#xff0c;让你的C语言技能实现质的飞跃&#xff01; 一、指针是什么&#xff1f;为什么它如此重要&#xff1f; 指针——这两个字让无数C语言初学者又爱又恨。简单来说&#xff0c;指针就是存储内存地址的变量。但它远不止如此&#xff01; 指针的三大核心意义…

SAGE-Net:融合语义信息的自动驾驶注意力预测框架

摘要 在自动驾驶领域,准确预测驾驶员的注意力焦点对于实现安全高效的驾驶决策至关重要。传统方法主要依赖人类眼动数据来构建显著性图,但这种方式存在明显局限性。本文介绍一种创新的语义增强注视检测方法(SAGE, Semantics Augmented GazE),通过将场景语义信息与原始眼动…

Flutter for OpenHarmony:用 StatefulWidget 实现基础用户交互

Flutter for OpenHarmony&#xff1a;用 StatefulWidget 实现基础用户交互 作者&#xff1a;灰灰勇闯IT 时间&#xff1a;2026年1月 适用环境&#xff1a;OpenHarmony 4.0 Flutter for OpenHarmony SDK 本文目标&#xff1a;掌握 StatefulWidget、setState()、按钮点击、文本输…

【读论文】EQ情感智能benchmark:EmoBench

摘要 在大型语言模型展现出惊人的逻辑推理能力的今天,其情感智能究竟处于何种水平?今天一起回顾看下联合了清华大学、密歇根大学、香港大学等多家顶尖机构,基于心理学理论构建了一套全新的评估基准。它不再满足于让模型识别“开心”或“难过”,而是要求模型理解**“为什么…

YOLO26改进 - 采样 | 小目标分割救星:HWD 降采样少丢细节提精度

前言 本文介绍了基于Haar小波的下采样&#xff08;HWD&#xff09;模块与YOLO26的结合&#xff0c;以解决语义分割任务中池化特征导致重要空间信息丧失的问题。HWD模块由无损特征编码模块和特征表示学习模块组成&#xff0c;通过Haar小波变换降低特征图空间分辨率并保留信息。…

【统一功能处理】从入门到源码:拦截器学习指南(含适配器模式深度解读) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

洛谷 P1918:保龄球 ← STL map

​【题目来源】https://www.luogu.com.cn/problem/P1918【题目描述】DL 算缘分算得很烦闷,所以常常到体育馆去打保龄球解闷。因为他保龄球已经打了几十年了,所以技术上不成问题,于是他就想玩点新花招。DL 的视力真的…

详细介绍:C++蓝桥杯之结构体10.15

详细介绍:C++蓝桥杯之结构体10.15pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

抖店商品图如何保存到手机上的方法

抖音小店图片提取保存下载的方法如下&#xff1a; 方案一&#xff1a;借助傻瓜式工具【电商素材提取器】 打开抖音商城&#xff1a; 首先&#xff0c;打开抖音APP并进入“商城”页面。 找到所需商品并点击详情&#xff1a; 在商城中&#xff0c;浏览或搜索找到你希望提取图片…

云端推理中的模型量化技术:减小体积提升速度

云端推理中的模型量化技术&#xff1a;减小体积提升速度 关键词&#xff1a;模型量化、云端推理、浮点精度、整数运算、计算效率、模型体积、量化误差 摘要&#xff1a;在云端推理场景中&#xff0c;深度学习模型的“大体积”和“慢速度”常成为性能瓶颈。本文将用“快递打包”…

C++实现ATM状态机

C实现ATM状态机 以下是一个使用 C 实现的 ATM 状态机示例程序&#xff0c;采用面向对象的方式实现。程序模拟了一个简单的 ATM 系统&#xff0c;包含以下功能&#xff1a; 用户登录查询余额存款取款退出完整代码 #include <iostream> #include <string> #include &…

导师严选2026 AI论文工具TOP10:自考论文写作全攻略

导师严选2026 AI论文工具TOP10&#xff1a;自考论文写作全攻略 2026年自考论文写作工具测评&#xff1a;为何需要一份精准榜单&#xff1f; 随着AI技术的不断进步&#xff0c;越来越多的自考学生开始依赖智能工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目的AI论文…

Java毕设项目推荐-基于SpringBoot的社区公益服务管理平台 基于springboot的社区志愿者服务系统【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【计算机毕业设计案例】基于springboot的居民志愿服务智慧系统社区志愿者服务系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

学长亲荐8个AI论文平台,助你搞定本科毕业论文!

学长亲荐8个AI论文平台&#xff0c;助你搞定本科毕业论文&#xff01; 论文写作的“秘密武器”&#xff1a;AI 工具如何成为你的得力助手 在本科毕业论文的撰写过程中&#xff0c;很多同学都会面临选题难、思路乱、资料少、语言表达不顺等多重挑战。而随着 AI 技术的不断成熟…

论文《关于预防人工智能反叛的初步探讨》修订版

本文已发表于《机器人技术与应用》2017年第4期&#xff0c;这是修订版 (期刊已声明&#xff1a;文章著作权归作者所有)。 这很可能是第一篇正式发表的、从行业技术架构演进的角度讨论人工智能反叛的论文&#xff0c;其中假定人工智能技术的发展将超越现有的深度网络架构。 对…