Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)
Vue 学习之旅:核心技术学习总结与实战案例分享
文章目录
- Vue 学习之旅:核心技术学习总结与实战案例分享
- 一、指令补充
- (一)指令修饰符
- (二)v-bind 对样式操作的增强
- (三)v-model 应用于其他表单元素
- Vue 的 `v-model` 指令在表单元素中的应用
- 一、输入框(`input:text`)
- 二、复选框(`input:checkbox`)
- 三、单选框(`input:radio`)
- 四、下拉菜单(`select`)
- 五、文本域(`textarea`)
- 二、计算属性
- (一)基础概念与语法
- (二)计算属性与方法的区别
- (三)计算属性的完整写法
- 三、侦听器
- (一)基础语法与作用
- (二)完整写法与配置项
- 四、综合案例:水果购物车
- 一、HTML结构搭建
- (一)顶部banner与面包屑
- (二)购物车主体与空车提示
- (三)购物车表格结构
- **`item.isChecked` 的作用与使用**
- **全选功能的实现(`isAll` 计算属性)**
在 Vue 的学习过程中,今天我们深入探索了一些关键的技术点,包括指令补充、计算属性、侦听器以及综合案例的应用。这些技术点相互配合,为构建强大的 Vue 应用提供了坚实的基础。
一、指令补充
(一)指令修饰符
指令修饰符通过在指令后添加特定的后缀,简化了代码编写并实现了一些特定的功能。
- 按键修饰符:例如
@keyup.enter,用于监听键盘回车事件。在实际应用中,比如在一个搜索框组件中,当用户按下回车键时,可以触发 search 搜索操作。
<input @keyup.enter="search">
-
v-model 修饰符
v-model.trim:能够去除输入内容的首尾空格。在用户注册表单中,当用户输入用户名时,使用该修饰符可以确保输入的用户名前后没有多余的空格,提高数据的准确性。而中间的空格会被看作是用户想输入的内容进行保留。
v-model.number:可将输入内容转换为数字类型。在处理数字输入的场景,如商品数量输入框,能方便地获取正确的数据类型。正确转换后会显示蓝色。
-
事件修饰符
-
@事件名.stop:阻止事件冒泡。在嵌套的元素事件处理中,如果内层元素的事件触发不希望影响到外层元素的相同事件,就可以使用该修饰符。例如,在一个列表项的点击事件中,防止点击事件冒泡到父元素的点击事件处理函数。所以一般 .stop 会放在子元素中。 -
<h3>@事件名.stop → 阻止冒泡</h3><div @click="fatherFn" class="father"><div @click.stop="sonFn" class="son">儿子</div></div> -
@事件名.prevent:阻止默认行为。比如在表单提交按钮的点击事件中,如果需要在提交前进行一些自定义验证,且不希望表单自动提交,可以使用该修饰符阻止默认的提交行为。如当不想超链接跳转到另一个网页时,就可以使用其来阻止跳转。 -
<h3>@事件名.prevent → 阻止默认行为</h3><a @click.prevent href="http://www.baidu.com">阻止默认行为</a>
-
(二)v-bind 对样式操作的增强
- 操作 class
- 语法为
class="对象/数组"。当使用对象语法时,键是类名,值为布尔值,如果值为true,则元素会添加对应的类名,否则不添加。例如:
- 语法为
<div class="box" :class="{ active: isActive, 'text-bold': isBold }"></div>
这里的 isActive 和 isBold 是 Vue 实例中的数据属性,根据它们的值动态切换类名。这种方式适用于单个类名需要根据条件来回切换的场景,比如一个按钮的激活态和非激活态的样式切换。
-
数组语法则是将数组中的所有类名都添加到元素上,如
<div class="box" :class="[ 'pink', 'big' ]"></div>,适用于批量添加或删除类名的情况,比如在不同的页面主题切换时,一次性添加或移除一组相关的类名。 -
操作 style
-
语法为
style="样式对象",例如<div class="box" :style="{ color: textColor, fontSize: fontSize + 'px' }"></div>。这里的textColor和fontSize是 Vue 实例中的数据属性,通过这种方式可以实现对元素具体样式属性的动态设置。在一个可定制主题的页面中,可以根据用户的选择动态改变文字颜色和字体大小等样式。 -
如:同时要记住,看见特殊的属性如:
background-color需要加单引号处理 ’ ’ -
<div class="box" :style = "{width : '400px' , height : '400px' , 'background-color' : 'green'}"></div>
-
举个例子:
-
首先通过
v-for指令循环渲染导航栏的每个选项,利用:key绑定每个选项的id。 -
给每个选项添加
@click事件,点击时更新activeIndex的值。 -
使用
:class指令结合activeIndex动态为当前选中的选项添加active类,实现样式切换,从而完成 tab 导航栏的切换功能。 -
完整源码:
-
<!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>* {margin: 0;padding: 0;}ul {display: flex;border-bottom: 2px solid #e01222;padding: 0 10px;}li {width: 100px;height: 50px;line-height: 50px;list-style: none;text-align: center;}li a {display: block;text-decoration: none;font-weight: bold;color: #333333;}li a.active {background-color: #e01222;color: #fff;}</style> </head> <body><div id="app"><ul><li v-for = "(item , index) in list" :key ="item.id" @click="activeIndex = index"><a :class="{active : index === activeIndex}" href="#">{{ item.name }}</a></li></ul></div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {activeIndex: 0,list: [{ id: 1, name: '京东秒杀' },{ id: 2, name: '每日特价' },{ id: 3, name: '品类秒杀' }]}})app.mount('#app')</script> </body> </html>结果展示为:

通过点击“每日特价”后,会变成:

(三)v-model 应用于其他表单元素
Vue 的 v-model 指令在表单元素中的应用
在 Vue 中,v-model 是一个强大的指令,它为表单元素提供了双向数据绑定的功能,使表单数据的处理变得更加简洁和直观。以下是对其在不同表单元素中应用的详细说明。
一、输入框(input:text)
输入框通常用于接收用户输入的文本信息。使用 v-model 可以轻松实现输入框与 Vue 实例中的数据属性的双向绑定,让数据的更新变得自动且实时。
<!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>/* 简单的样式设置,用于输入框 */input {margin-bottom: 10px;}</style>
</head>
<body><div id="app"><h3>输入框示例</h3><!-- 使用 v-model 将输入框的值与 Vue 实例中的 username 属性进行双向绑定 --><input type="text" v-model="username" placeholder="请输入用户名"> </div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {// 存储输入框中的用户名username: '' }});app.mount('#app');</script>
</body>
</html>
代码解释
v-model="username":将输入框与 Vue 实例中的username属性进行双向绑定。当用户在输入框中输入文本时,username属性的值会实时更新;反之,当username属性的值发生改变时,输入框中的内容也会相应更新。
二、复选框(input:checkbox)
复选框通常用于表示二进制选择,例如用户是否同意某些条款或具有某种属性。使用 v-model 可以将复选框的选中状态与 Vue 实例中的布尔值属性关联起来。
<!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>/* 简单的样式设置,用于复选框 */input {margin-bottom: 10px;}</style>
</head>
<body><div id="app"><h3>复选框示例</h3><!-- 使用 v-model 将复选框的选中状态与 Vue 实例中的 isSingle 属性进行双向绑定 --><input type="checkbox" v-model="isSingle"> 是否单身?</div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {// 存储复选框的选中状态,默认为 falseisSingle: false }});app.mount('#app');</script>
</body>
</html>
代码解释
v-model="isSingle":将复选框的checked属性与 Vue 实例中的isSingle属性进行双向绑定。当用户勾选或取消勾选复选框时,isSingle属性的值会在true和false之间切换;反之,当isSingle的值被修改时,复选框的选中状态也会相应改变。
三、单选框(input:radio)
单选框用于在多个选项中选择一个。为了确保单选框的互斥性,需要将它们分组,并使用 v-model 将组内单选框的选中值与 Vue 实例中的属性关联。
<!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>/* 简单的样式设置,用于单选框 */input {margin-bottom: 10px;}</style>
</head>
<body><div id="app"><h3>单选框示例</h3><!-- 为单选框分组并使用 v-model 将选中值与 Vue 实例中的 gender 属性进行双向绑定 -->性别: <input type="radio" name="gender" v-model="gender" value="1"> 男<input type="radio" name="gender" v-model="gender" value="2"> 女</div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {// 存储单选框的选中值,默认为 ''gender: '' }});app.mount('#app');</script>
</body>
</html>
代码解释
name="gender":为单选框分组,确保同一组内的单选框互斥。v-model="gender":将单选框组的选中值与 Vue 实例中的gender属性进行双向绑定。当用户选择一个单选框时,gender属性的值会更新为该单选框的value;反之,当gender属性的值被修改时,相应的单选框会被选中。
四、下拉菜单(select)
下拉菜单提供了多个选项供用户选择。使用 v-model 可以将用户的选择与 Vue 实例中的属性关联。
<!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>/* 简单的样式设置,用于下拉菜单 */select {margin-bottom: 10px;}</style>
</head>
<body><div id="app"><h3>下拉菜单示例</h3><!-- 使用 v-model 将下拉菜单的选中值与 Vue 实例中的 cityId 属性进行双向绑定 -->所在城市:<select v-model="cityId"><option value="101">北京</option><option value="102">上海</option><option value="103">成都</option><option value="104">南京</option></select></div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {// 存储下拉菜单的选中值,默认为 '101'cityId: '101' }});app.mount('#app');</script>
</body>
</html>
代码解释
v-model="cityId":将下拉菜单的选中值与 Vue 实例中的cityId属性进行双向绑定。当用户选择一个选项时,cityId属性的值会更新为该选项的value;反之,当cityId属性的值被修改时,相应的选项会被选中。
五、文本域(textarea)
文本域用于输入多行文本。使用 v-model 可以实现文本域内容与 Vue 实例中的属性的双向绑定。
<!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-bottom: 10px;}</style>
</head>
<body><div id="app"><h3>文本域示例</h3><!-- 使用 v-model 将文本域的内容与 Vue 实例中的 desc 属性进行双向绑定 -->自我描述:<textarea v-model="desc"></textarea> </div><script src="./vue.js"></script><script>const app = new Vue({el: '#app',data: {// 存储文本域中的内容,默认为 ''desc: '' }});app.mount('#app');</script>
</body>
</html>
代码解释
v-model="desc":将文本域的内容与 Vue 实例中的desc属性进行双向绑定。当用户在文本域中输入文本时,desc属性的值会实时更新;反之,当desc属性的值发生改变时,文本域中的内容也会相应更新。
二、计算属性
(一)基础概念与语法
计算属性是基于现有的数据计算出来的新属性,当依赖的数据发生变化时,会自动重新计算。其语法是在 computed 配置项中声明,一个计算属性对应一个函数,使用时就像普通属性一样通过 {{ 计算属性名 }} 在模板中使用。例如:
data: { !!!!!!!!list: [{ id: 3, name: '铅笔', num: 5 },{ id: 1, name: '篮球', num: 1 },{ id: 2, name: '玩具', num: 2 }]
},
computed: {totalCount() {return this.list.reducedata: {list: [{ id: 3, name: '铅笔', num: 5 },{ id: 1, name: '篮球', num: 1 },{ id: 2, name: '玩具', num: 2 }]
},
computed: {totalCount() {return this.list.reduce((sum, item) => sum + item.num, 0); // 0是求和的起始值}
}
在上述代码中,totalCount 计算属性会根据 list 数组中每个元素的 num 属性计算出总数。每当 list 数组发生变化时,totalCount 会自动重新计算,保证数据的实时性和准确性。
(二)计算属性与方法的区别
计算属性主要用于封装对数据的处理并求得一个结果,它作为属性直接使用,如 {{ totalCount }}。而方法是定义在 methods 配置项中,需要通过 this.方法名() 进行调用,如 @click="doSomething"。计算属性具有缓存特性,会对计算结果进行缓存,再次使用时直接读取缓存,只有当依赖项变化时才会重新计算并更新缓存,这在性能上有很大的优势。相比之下,方法每次调用都会执行一遍函数内的代码。
(三)计算属性的完整写法
计算属性默认的简写形式只能读取访问,不能直接修改。若要实现修改功能,则需要使用完整写法。例如:
computed: {fullName: {get() {return this.firstName +'' + this.lastName;},set(newValue) {const names = newValue.split(' ');this.firstName = names[0];this.lastName = names[names.length - 1];}}
}
在这个例子中,fullName 计算属性有 get 和 set 方法,get 方法用于获取计算后的全名,set 方法用于根据设置的新值分解并更新 firstName 和 lastName。
三、侦听器
(一)基础语法与作用
侦听器(watch)用于监视数据变化,并在数据变化时执行一些业务逻辑或异步操作。简单写法是直接监视简单类型数据,例如:
watch: {dataPropertyName(newValue, oldValue) {// 一些业务逻辑或异步操作}
}
这里的 dataPropertyName 是 Vue 实例中的数据属性,当它的值发生变化时,会触发对应的函数执行。
(二)完整写法与配置项
完整写法可以添加额外的配置项,如 deep: true 用于对复杂类型进行深度监视,immediate: true 则在初始化时立刻执行一次 handler 方法。例如:
data: {obj: {words: '苹果',lang: 'italy'}
},
watch: {'obj.words': {deep: true,immediate: true,handler(newValue) {console.log(newValue);}}
}
在这个例子中,当 obj 中的 words 属性发生变化时,会触发 handler 函数执行,并且由于 deep: true,即使 words 是 obj 的嵌套属性也能被正确监视,immediate: true 使得页面加载时就会执行一次 handler 函数进行初始处理。
四、综合案例:水果购物车
一、HTML结构搭建
整体页面结构围绕 id 为 app 的 div 元素构建,这个元素是Vue应用的挂载点。
(一)顶部banner与面包屑
<!-- 顶部banner -->
<div class="banner-box"><img src="./img/fruit.jpg" alt="" /></div>
<!-- 面包屑 -->
<div class="breadcrumb"><span>🏠</span>/<span>购物车</span>
</div>
顶部的 banner-box 用于展示一张购物车相关的图片,面包屑导航则方便用户了解自己所处的页面位置,以 / 分隔展示层级关系,增强用户体验。
(二)购物车主体与空车提示
<!-- 购物车主体 -->
<div class="main" v-if="fruitList.length > 0"><!-- 购物车表格内容,包含头部、身体和底部 -->
</div>
<!-- 空车 -->
<div class="empty" v-else>🛒空空如也</div>
这里使用 v-if 和 v-else 指令,根据 fruitList 数组的长度判断显示购物车主体还是空车提示信息。若 fruitList 有数据,显示购物车主体,否则展示空车的提示。
(三)购物车表格结构
购物车表格结构分为头部、身体和底部三部分。
<!-- 头部 -->
<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" checked /></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="sum(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.price * item.num}}</div><div class="td"><button @click="del(item.id)">删除</button></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">总价 : ¥ <span class="price">{{ totalPrice }}</span></span><!-- 结算按钮 --><button class="pay">结算( {{totalCount}} )</button></div>
</div>
头部定义了表格各列的标题。身体部分通过 v-for 指令循环渲染每一行商品信息,:key 绑定每个商品的唯一 id,方便Vue高效地更新和渲染列表。同时,通过 :class 指令根据商品的 isChecked 状态动态添加 active 类,用于设置选中商品的样式。每个商品行包含复选框、商品图片、单价、数量输入框、小计和删除按钮。底部则有全选复选框以及显示总价和结算按钮的区域,其中总价和结算数量通过插值表达式。接下来为更细分的讲解:
这段购物车表格结构代码实现了购物车中商品信息的展示、交互以及相关数据的计算与呈现,以下是对 item.isChecked 等关键内容以及商品总价计算方法的总结:
-
item.isChecked的作用与使用- 作用:
item.isChecked是购物车中每个商品对象的一个布尔属性,用于表示该商品是否被选中 。通过这个属性,实现了商品的选中状态管理,进而支持全选、反选以及计算选中商品的总价和总数量等功能。 - 在代码中的使用:在表格的商品行中,
<input type="checkbox" v-model="item.isChecked" checked />这一行代码将复选框的选中状态与商品对象的isChecked属性进行双向绑定。当用户勾选或取消勾选复选框时,item.isChecked的值会相应地改变;反之,当item.isChecked的值通过代码逻辑改变时,复选框的选中状态也会同步更新。同时,在表格行的样式绑定中,:class="{active : item.isChecked}"根据item.isChecked的值来动态添加或移除active类,从而改变选中商品行的样式,增强用户交互体验。
- 作用:
-
全选功能的实现(
isAll计算属性)- 实现方式:全选功能通过计算属性
isAll来实现,它具有get和set方法。get方法:
- 实现方式:全选功能通过计算属性
get () {return this.fruitList.every(item => item.isChecked);
}
get 方法通过 every 方法遍历 fruitList 数组,检查数组中的每个商品的 isChecked 属性是否都为 true。只有当所有商品的 isChecked 都为 true 时,isAll 计算属性才返回 true,此时全选复选框会被勾选;否则,全选复选框不勾选。

set方法:
set (value) {this.fruitList.forEach(item => item.isChecked = value);
}
当全选复选框的状态发生改变时,set 方法会被调用。它通过 forEach 方法遍历 fruitList 数组,将每个商品的 isChecked 属性设置为与全选复选框相同的值,实现全选和反选的功能。
3. ##### 商品总价计算(totalPrice 计算属性)
- **计算方法**:通过 `totalPrice` 计算属性来计算选中商品的总价。
totalPrice() {return this.fruitList.reduce((sum, item) => {if(item.isChecked){return sum + item.num * item.price;} else {return sum;}}, 0);
}
在 totalPrice 计算属性中,使用 reduce 方法遍历 fruitList 数组。对于数组中的每个商品,如果该商品被选中(item.isChecked 为 true),则将其单价(item.price)乘以数量(item.num)并累加到 sum 中;如果未被选中,则直接返回 sum。最后返回累加的结果,即选中商品的总价。在表格底部的总价展示区域,通过插值表达式 {{ totalPrice }} 将计算出的总价实时显示在页面上。
4. ##### 商品总数量计算(totalCount 计算属性)
- **计算方法**:`totalCount` 计算属性用于计算选中商品的总数量。
totalCount() {return this.fruitList.reduce((sum, item) => {if(item.isChecked){return sum + item.num;} else {return sum;}}, 0);
}
与计算总价类似,totalCount 也使用 reduce 方法遍历 fruitList 数组。当商品被选中时,将其数量(item.num)累加到 sum 中,未选中则直接返回 sum。最终返回的 sum 就是选中商品的总数量,同样在结算按钮旁边通过插值表达式 {{totalCount}} 展示在页面上。

相关文章:
Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)
Vue 学习之旅:核心技术学习总结与实战案例分享 文章目录 Vue 学习之旅:核心技术学习总结与实战案例分享一、指令补充(一)指令修饰符(二)v-bind 对样式操作的增强(三)v-model 应用于其…...
freertos的基础(二)内存管理:堆和栈
1. 堆(Heap) 定义 堆是 FreeRTOS 中用于动态内存分配的内存区域。FreeRTOS 提供了多种堆管理方案(如 heap_1、heap_2、heap_4 等),开发者可以根据需求选择合适的内存管理策略。 作用 用于动态分配内存,例…...
vue \n 换行不不显示
Vue 中,直接使用包含 \n 的字符串进行渲染时,换行符不会被识别为 HTML 的换行,因为 Vue 默认会将其视为普通文本。 对此提供两种解决办法 方法一:使用 v-html 指令替换 \n 为 <br> <template><div v-html"…...
GPT 系列论文精读:从 GPT-1 到 GPT-4
学习 & 参考资料 前置文章 Transformer 论文精读 机器学习 —— 李宏毅老师的 B 站搬运视频 自监督式学习(四) - GPT的野望[DLHLP 2020] 來自猎人暗黑大陆的模型 GPT-3 论文逐段精读 —— 沐神的论文精读合集 GPT,GPT-2,GPT-3 论文精读【论文精读】…...
在 Ubuntu 上安装和配置 Redis
在 Ubuntu 上安装和配置 Redis,并使用发布-订阅(Pub/Sub)功能,可以按照以下步骤进行: 一、安装 Redis 1. 更新包列表 首先,更新本地的包列表以确保获取到最新的软件包信息: sudo apt update…...
Excel中双引号问题
背景: 从Excel中读取数据时,发现有的单元格读出来是一个双引号,有的是一个双引号 "{""accountName"": ""全字段"",""accountState"": ""NORMAL"",&q…...
【机器学习】主动学习-增加标签的操作方法-流式选择性采样(Stream-based selective sampling)
Stream-Based Selective Sampling Stream-based selective sampling 是一种主动学习方法,在处理大量数据流时特别有用。它允许学习算法动态选择是否对当前数据实例进行标注(通过与 Oracle 交互)。此方法主要应用于流数据场景中,目…...
elementUI项目中,只弹一个【token过期提示】信息框的处理
关键代码 let msgArr document.querySelectorAll(.token401Message)if (!msgArr.length) {Message({customClass: token401Message,message: response.data.msg,type: error,onClose: () > {msgArr []}})} 完整代码 import axios from axios import { getToken } from…...
SpringBoot开发—— SpringBoot中如何实现 HTTP 请求的线程隔离
文章目录 1、Servlet 容器与线程池管理1.1 线程池的作用1.2 线程池的配置 2、HTTP 请求的线程隔离2.1 请求上下文和会话信息2.2 多线程处理的隔离性 3、 ThreadLocal 和线程上下文隔离3.1ThreadLocal的使用3.2 保证线程隔离性 4、Async异步任务的线程隔离4.1 异步任务的线程池4…...
【LLM】25.1.11 Arxiv LLM论文速递
25.1.10 12:00 - 25.1.11 12:00 共更新36 篇 —第1篇---- Supervision policies can shape long-term risk management in general-purpose AI models 🔍 关键词: 通用型人工智能,风险管理,监督政策,模拟框架 PDF链接 摘要: 通…...
单片机实物成品-012 酒精监测
项目介绍 本项目以软硬件结合的方式,选择 C 语言作为程序硬件编码语言, 以 STM32 单片机作为核心控制板,在数据传输节点上连接酒精传感器对酒精浓度进行 实时检测,且对高浓度酒精采取强制干预和紧急预警,并将数据通过…...
使用葡萄城+vue实现Excel
最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等,代码实在太多 有需要可留言 第一步:创建表头 请使用官网提供的网址:在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号,创建一个新的sheet页 默认新创建的she…...
【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
一、import导入css样式 在项目文件中创建一个common文件夹,下面创建一个css文件夹,里面放上style.css文件,编写的是公共样式,我们现在要在App.vue中引入该样式。 在App.vue中引入该样式,这样就会使样式全局生效&#…...
跟我学C++中级篇——字节序
一、什么是字节序 在谈字节序前讲个小故事,在小说《格列佛游记》中,有两派势力为了吃鸡蛋的时候儿到底是先打破大的一端还是打破小的一端展开了战争,而且这场战争持续了很久。后来,1980年,Danny Cohen在论文"On …...
Linux网络编程5——多路IO转接
一.TCP状态时序理解 1.TCP状态理解 **CLOSED:**表示初始状态。 **LISTEN:**该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。 **SYN_SENT:**这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时…...
Redis常见
Redis 事务 什么是 Redis 事务? 你可以将 Redis 中的事务理解为:Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。 Redis 事务实际开发中使用的非常少,功能比…...
提升 PHP 编码效率的 10 个实用函数
PHP开发者始终追求更简洁、高效的代码。幸运的是,PHP 提供了丰富的内置函数,能显著减少手动编码,提升开发效率。无论经验深浅,掌握这些函数的使用技巧都至关重要。 以下列出了 10 个可以显著加快您的编码过程的 PHP 函数…...
设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析
访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离,使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…...
golang之数据库操作
1.导入必要的包 import("database/sql"_ "github.com/go-sql-driver/mysql" //使用此作为数据库驱动 ) 2.相关操作 连接数据库 使用sql.Open()函数进行数据库的连接 db, err : sql.Open("mysql", "user:passwordtcp(127.0.0.1:3306)/db…...
对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察
近日,张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任,他将如何跟随 Apache SeaTunnel 社区迈向新的高度?让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己,包括职业背景、当前的工作…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...
