当前位置: 首页 > news >正文

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:能够去除输入内容的首尾空格。在用户注册表单中,当用户输入用户名时,使用该修饰符可以确保输入的用户名前后没有多余的空格,提高数据的准确性。而中间的空格会被看作是用户想输入的内容进行保留。
    • image-20250108102247125
    • 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>

这里的 isActiveisBold 是 Vue 实例中的数据属性,根据它们的值动态切换类名。这种方式适用于单个类名需要根据条件来回切换的场景,比如一个按钮的激活态和非激活态的样式切换。

  • 数组语法则是将数组中的所有类名都添加到元素上,如 <div class="box" :class="[ 'pink', 'big' ]"></div>,适用于批量添加或删除类名的情况,比如在不同的页面主题切换时,一次性添加或移除一组相关的类名。

  • 操作 style

    • 语法为 style="样式对象",例如 <div class="box" :style="{ color: textColor, fontSize: fontSize + 'px' }"></div>。这里的 textColorfontSize 是 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>
    

    结果展示为:

    image-20250108104306619

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

image-20250108104334020

(三)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 属性的值发生改变时,输入框中的内容也会相应更新。
  • image-20250108204008772
二、复选框(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 属性的值会在 truefalse 之间切换;反之,当 isSingle 的值被修改时,复选框的选中状态也会相应改变。
  • image-20250108204038785
三、单选框(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 属性的值被修改时,相应的单选框会被选中。
  • image-20250108204101068
四、下拉菜单(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 属性的值被修改时,相应的选项会被选中。
  • image-20250108204125143
五、文本域(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 属性的值发生改变时,文本域中的内容也会相应更新。
  • image-20250108204208651

二、计算属性

(一)基础概念与语法

计算属性是基于现有的数据计算出来的新属性,当依赖的数据发生变化时,会自动重新计算。其语法是在 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 计算属性有 getset 方法,get 方法用于获取计算后的全名,set 方法用于根据设置的新值分解并更新 firstNamelastName

三、侦听器

(一)基础语法与作用

侦听器(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,即使 wordsobj 的嵌套属性也能被正确监视,immediate: true 使得页面加载时就会执行一次 handler 函数进行初始处理。

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

一、HTML结构搭建

整体页面结构围绕 idappdiv 元素构建,这个元素是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-ifv-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">总价&nbsp;&nbsp;:&nbsp;&nbsp;¥&nbsp;<span class="price">{{ totalPrice }}</span></span><!-- 结算按钮 --><button class="pay">结算( {{totalCount}} )</button></div>
</div>

头部定义了表格各列的标题。身体部分通过 v-for 指令循环渲染每一行商品信息,:key 绑定每个商品的唯一 id,方便Vue高效地更新和渲染列表。同时,通过 :class 指令根据商品的 isChecked 状态动态添加 active 类,用于设置选中商品的样式。每个商品行包含复选框、商品图片、单价、数量输入框、小计和删除按钮。底部则有全选复选框以及显示总价和结算按钮的区域,其中总价和结算数量通过插值表达式。接下来为更细分的讲解:

这段购物车表格结构代码实现了购物车中商品信息的展示、交互以及相关数据的计算与呈现,以下是对 item.isChecked 等关键内容以及商品总价计算方法的总结:

  1. item.isChecked 的作用与使用
    • 作用item.isChecked 是购物车中每个商品对象的一个布尔属性,用于表示该商品是否被选中 。通过这个属性,实现了商品的选中状态管理,进而支持全选、反选以及计算选中商品的总价和总数量等功能。
    • 在代码中的使用:在表格的商品行中,<input type="checkbox" v-model="item.isChecked" checked /> 这一行代码将复选框的选中状态与商品对象的 isChecked 属性进行双向绑定。当用户勾选或取消勾选复选框时,item.isChecked 的值会相应地改变;反之,当 item.isChecked 的值通过代码逻辑改变时,复选框的选中状态也会同步更新。同时,在表格行的样式绑定中,:class="{active : item.isChecked}" 根据 item.isChecked 的值来动态添加或移除 active 类,从而改变选中商品行的样式,增强用户交互体验。
  2. 全选功能的实现(isAll 计算属性)
    • 实现方式:全选功能通过计算属性 isAll 来实现,它具有 getset 方法。
      • get 方法
get () {return this.fruitList.every(item => item.isChecked);
}

get 方法通过 every 方法遍历 fruitList 数组,检查数组中的每个商品的 isChecked 属性是否都为 true。只有当所有商品的 isChecked 都为 true 时,isAll 计算属性才返回 true,此时全选复选框会被勾选;否则,全选复选框不勾选。

image-20250113164644109

  • 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.isCheckedtrue),则将其单价(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}} 展示在页面上。

image-20250113164708061

相关文章:

Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)

Vue 学习之旅&#xff1a;核心技术学习总结与实战案例分享 文章目录 Vue 学习之旅&#xff1a;核心技术学习总结与实战案例分享一、指令补充&#xff08;一&#xff09;指令修饰符&#xff08;二&#xff09;v-bind 对样式操作的增强&#xff08;三&#xff09;v-model 应用于其…...

【Linux网络编程】数据链路层 | MAC帧 | ARP协议

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系…...

vscode vue 自动格式化

vscode vue 自动格式化 安装Prettier和Vetur插件 选择设置&#xff0c;并且转到编辑文件。增加如下内容。 {"editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","[vue]": {"editor.defaultFor…...

GitCode G-Star 光引计划终审前十名获奖项目公示

在技术的浩瀚星空中&#xff0c;GitCode 平台上的 G-Star 项目熠熠生辉。如今&#xff0c;“光引计划” 已圆满落幕&#xff0c;众多 G-Star 项目作者&#xff0c;一同分享项目在 GitCode 平台托管的宝贵体验&#xff0c;并深入挖掘平台的多样玩法。 众多投稿纷至沓来&#xf…...

Postgres14.4(Docker安装)

Postgres14.4&#xff08;Docker安装&#xff09; 一&#xff0c;Docker拉取镜像 docker pull postgres:14.4 #检查镜像是否拉取成功 docker images | grep postgres二&#xff0c;新建挂载目录&#xff0c;并运行容器 mkdir -p /data/postgre/data chmod 777 /data/postgre/…...

R.swift库的详细用法

R.swift 是一个 Swift 工具库,它提供了一个自动生成的类 R,使得你可以通过类型安全的方式访问项目中的资源,例如图片、字体、颜色、XIB 文件等。通过 R.swift,你可以避免字符串类型的错误,提升代码的可维护性。 以下是 R.swift 库的详细用法: 1. 安装 R.swift 使用 Sw…...

Redis高危漏洞-GHSA-whxg-wx83-85p5:用户可能会使用特制的 Lua 脚本来触发堆栈缓冲区溢出

官方漏洞描述&#xff1a;https://github.com/redis/redis/security/advisories/GHSA-whxg-wx83-85p5 Redis 是一个高性能的键值数据库&#xff0c;广泛用于缓存和存储数据。由于其功能丰富&#xff0c;Redis 允许用户通过 Lua 脚本来执行服务器端的操作。Lua 脚本通常用来在 …...

分组通道自注意力G-CSA详解及代码复现

G-CSA定义 G-CSA (Grouped Channel Self-Attention) 是一种创新性的视觉注意力机制,巧妙地结合了卷积和自注意力的优势。通过将输入特征图划分为多个独立的通道组,在每个组内执行自注意力操作,G-CSA实现了高效的全局信息交互,同时保留了局部特征细节。这种方法不仅提高了模…...

Unity 自定义批量打包工具

打包配置项 using UnityEngine; using System.Collections.Generic;namespace MYTOOL.Build {[System.Flags]public enum VersionOptions{None 0,Major 1,Minor 4,Build 8,Revision 0x10,}/// <summary>/// 批量打包配置文件/// </summary>[CreateAssetMenu]…...

WebGL性能检测

WebGL性能检测系统说明 检测维度 1. WebGL版本支持检测(20分) WebGL 1.0 和 WebGL 2.0 版本检测WebGL 2.0 支持得20分仅支持WebGL 1.0 得12分主要影响高级特性和性能优化的可用性2. GPU性能评估(25分) 通过WEBGL_debug_renderer_info获取显卡信息根据GPU品牌和型号进行评…...

C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序

1 欧拉路径 欧拉路径是图中每一条边只访问一次的路径。欧拉回路是在同一顶点上开始和结束的欧拉路径。 这里展示一种输出欧拉路径或回路的算法。 以下是Fleury用于打印欧拉轨迹或循环的算法&#xff08;源&#xff09;。 1、确保图形有0个或2个奇数顶点。2、如果有0个奇数顶…...

Jenkins触发器--在其他项目执行后构建

前言&#xff1a; jenkins中有多种触发器可用&#xff0c;可以方便的控制构建的启动 这里简单介绍下项目后构建的配置方法 1. 解释&#xff1a; Build after other projects are built Set up a trigger so that when some other projects finish building, a new build is…...

UE5.4运行报错解决(关于osg使用-无法解决的外部命令)(未解决)

报错如下&#xff1a; 09:38:06:665 4>EpicGames.Core -> E:\AppInstall\EpicGames\UE_5.4\Engine\Source\Programs\Shared\EpicGames.Core\bin\Development\net6.0\EpicGames.Core.dll 09:38:06:668 5>------ 已启动全部重新生成: 项目: EpicGames.MsBuild, 配…...

Swift语言的软件工程

Swift语言的软件工程 引言 随着科技的不断进步&#xff0c;软件开发行业正在经历着前所未有的变化。在这场变革中&#xff0c;Swift语言作为苹果公司推出的一种新型编程语言&#xff0c;凭借其简洁、高效及安全的特性&#xff0c;正在快速崛起&#xff0c;成为现代软件工程中…...

国内外网络安全政策动态(2024年12月)

▶︎ 1.2项网络安全国家标准获批发布 2024年12月6日&#xff0c;根据2024年11月28日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告&#xff08;2024年第29号&#xff09;&#xff0c;全国网络安全标准化技术委员会归口的2项网络安全国家标准正…...

DELTA并联机械手视觉方案荣获2024年度机器人应用典型案例奖

直击现场 2025年1月9日晚&#xff0c;2024深圳市机器人年度评选颁奖典礼在深圳市南山区圣淘沙酒店正式拉开帷幕。本次颁奖活动由中国科学院深圳先进技术研究院指导&#xff0c;深圳市机器人协会与《机器人与智能系统》杂志组织承办。 正运动公司受邀参与此次典礼&#xff0c;…...

python 3个线程轮流打印A、B、C

要实现 Python 中三个线程轮流打印 A、B、C 的效果&#xff0c;可以使用 threading 模块和 Condition 或 Lock 来同步线程。以下是使用 Condition 的解决方案&#xff1a; 代码实现 import threading# 初始化条件变量 condition threading.Condition() current 0 # 共享变…...

Http 响应状态码 前后端联调

http 响应状态码 &#xff1a;是服务器在处理HTTP请求时返回的状态信息&#xff0c;用于表示请求的处理结果 1xx : 信息性状态码 100 Continue: 服务器已收到请求头部&#xff0c;客户端应继续发送请求体。 101 Switching Protocols : 切换协议。服务器已理解客户端的请求&a…...

AI Agent:软件测试自动化的新纪元

在信息技术日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;技术的蓬勃发展正引领着各个行业的深刻变革&#xff0c;软件测试领域同样迎来了前所未有的机遇与挑战。AI Agent&#xff0c;这一融合了先进机器学习与自然语言处理技术的智能实体&#xff0c;正悄然成…...

C#结构体,枚举,泛型,事件,委托--10

目录 一.结构体 二.特殊的结构体(ref struct): 三.枚举 四.泛型 泛型的使用: 1.泛型类:定义一个泛型类,使用类型参数T 2.泛型方法:在方法定义中使用类型参数 3.泛型接口 五.委托及泛型委托 委托 泛型委托 六.事件 事件: 泛型事件:使用泛型委托&#xff08;如Event…...

MATLAB语言的语法糖

MATLAB语言的语法糖 在现代编程语言中&#xff0c;语法糖&#xff08;Syntactic Sugar&#xff09;是一个常见的概念&#xff0c;它指的是某种编程语言提供的语法&#xff0c;使得代码更加简洁易读&#xff0c;而不改变语言本身的功能。MATLAB作为一种广泛应用于科学计算、工程…...

前端开发:HTML常见标签

1.注释标签 注释不会显示在界面上 . 目的是提高代码的可读性 . ctrl / 快捷键可以快速进行注释 / 取消注释 . <!-- 我是注释 --> 2.标题标签 有六个 , 从 h1 - h6. 数字越大 , 则字体越小 <h1> hello </h1> //我们所写的csdn的格式中的标题一…...

《AI发展的三个关键视角:基础设施、开源趋势与社会影响》

基础设施在AI研究中至关重要&#xff0c;但往往被忽视 基础设施在AI研究中至关重要&#xff0c;但往往被忽视&#xff0c;这一观点可以从多个方面进行深入探讨&#xff1a; 1. 基础设施的定义 基础设施在AI研究中通常指的是支持研究和开发的硬件、软件、网络和数据管理系统。…...

eslint.config.js和.eslintrc.js有什么区别

eslint.config.js 和 .eslintrc.js 的主要区别在于它们所对应的 ESLint 版本和配置方法&#xff1a; 1. .eslintrc.js&#xff1a; 这是 ESLint v8 及更早版本使用的配置文件格式。 它使用层级式的配置系统。 现在被称为"旧版"配置格式 。 2. eslint.config.js&am…...

Open FPV VTX开源之默认MAVLink设置

Open FPV VTX开源之默认MAVLink设置 1. 源由2. 准备3. 连接4. 安装5. 配置6. 测试6.1 启动wfb-ng服务6.2 启动wfb-ng监测6.3 启动QGroundControl6.4 观察测试结果 7. 总结8. 参考资料9. 补充9.1 telemetry_tx异常9.2 DEBUG串口部分乱码9.3 PixelPilot软件问题 1. 源由 飞控图传…...

一学就废|Python基础碎片,OS模块

Python 中的操作系统模块提供了与操作系统交互的功能。操作系统属于 Python 的标准实用程序模块。该模块提供了一种使用依赖于操作系统的功能的可移植方式。os和os. path模块包括许多与文件系统交互的函数。 Python-OS 模块函数 我们将讨论 Python os 模块的一些重要功能&…...

新版本的IDEA如何解决Git分支显示为警告⚠<unknown>的问题

目录 问题再现 解决思路 首先我们要想到 这个分支有没有从远程代码仓库拉去下来 复习一下 git 命令 其次思考 最后思考 问题再现 这边我使用的是 IDEA 2024.3.3.1 Jetbrains 官网的最新版 同时也是官方账号登录 的 今天上 github 去拉项目到 本地 出现了分支不显示的问…...

HTML和CSS相关的问题,为什么页面加载速度慢?

页面加载速度慢是网站优化中一个常见的问题&#xff0c;可能由于多种原因&#xff0c;包括HTML和CSS的代码编写方式、资源的加载顺序、页面渲染的复杂性等。以下是一些常见的原因和优化方法&#xff0c;结合实际项目代码示例进行讲解。 1. 过多的资源请求 如果页面包含大量的…...

使用葡萄城+vue实现Excel

最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等&#xff0c;代码实在太多 有需要可留言 第一步&#xff1a;创建表头 请使用官网提供的网址&#xff1a;在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号&#xff0c;创建一个新的sheet页 默认新创建的she…...

【漫话机器学习系列】042.提前停止训练的优势(Early Stopping Advantages)

提前停止训练&#xff08;Early Stopping&#xff09;的优势 提前停止是一种有效的正则化技术&#xff0c;在训练模型时通过监控验证集的性能来决定训练的结束点&#xff0c;从而避免过拟合。以下是提前停止的主要优势&#xff1a; 1. 防止过拟合 提前停止通过在验证集性能开…...

【2024遥感应用组一等奖】基于风云四号卫星的小时级大气气溶胶和颗粒物监测

作品介绍‍ 01 研究背景‍ 人口和产业的增长和集聚,增加了污染物的排放,改变了污染物的扩散条件,导致中国区域空气污染严重,是目前可持续发展面临的重大挑战之一。其中细颗粒物(PM2.5)是国内主要的空气污染物,威胁居民的身心健康,影响城市生态系统中社会、经济和自然…...

Cesium加载地形

Cesium的地形来源大致可以分为两种&#xff0c;一种是由Cesium官方提供的数据源&#xff0c;一种是第三方的数据源&#xff0c;官方源依赖于Cesium Assets&#xff0c;如果设置了AccessToken后&#xff0c;就可以直接使用Cesium的地形静态构造方法来获取数据源CesiumTerrainPro…...

Spring-Cloud-Gateway-Samples,nacos为注册中心,负载均衡

背景&#xff1a;本想找个简单例子看下&#xff0c;无奈版本依赖太过复杂&#xff0c;花了点时间。记录下吧 使用Spring Cloud Gateway作为网关服务&#xff0c;Nacos作为注册中心&#xff0c;实现对子服务的负载均衡访问。简单例子。 环境要求&#xff1a;JDK1.8、nacos 1.3…...

Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地

Centos9 Docker 安装 MySQL8.4.0 定时备份数据库到本地 创建目录&#xff0c;创建配置文件启动容器命令定时备份MySQL执行脚本Linux每日定时任务命令文件内参数其他时间参数 AT一次性定时任务 创建目录&#xff0c;创建配置文件 $ mkdir -p /opt/mysql/conf$ vim /opt/mysql/…...

【开源免费】基于Vue和SpringBoot的英语知识应用网站(附论文)

本文项目编号 T 138 &#xff0c;文末自助获取源码 \color{red}{T138&#xff0c;文末自助获取源码} T138&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

aws(学习笔记第二十四课) 使用sam开发step functions

aws(学习笔记第二十四课) 使用sam开发step functions 学习内容&#xff1a; 生成sam的step functions实例程序什么是SAM amazon Serverless Application ModelSAM程序结构SAM执行程序 1. 生成sam的step functions实例程序 参照文档 这里参照AWS的官方文档SAM amazon Serverl…...

RabbitMQ介绍与使用

RabbitMQ官网 RabbitMQ 介绍 RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;基于 AMQP&#xff08;高级消息队列协议&#xff09;标准&#xff0c;使用 Erlang 编程语言构建。它是消息队列&#xff08;MQ&#xff09;的一种&#xff0c;广泛应用于分布式系统中&#x…...

LeetCode 热题 100_腐烂的橘子(52_994_中等_C++)(图;广度优先遍历(队列))

LeetCode 热题 100_腐烂的橘子&#xff08;52_994&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;广度优先遍历&#xff08;队列&#xff09;&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一…...

【数学】概率论与数理统计(五)

文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …...

《AI模型格局演变:Claude、Gemini Flash与OpenAI的技术角力》

Anthropic的Claude模型在通用聊天模型中表现优异&#xff0c;但在市场份额上仍落后于OpenAI Anthropic的Claude模型在通用聊天模型中的表现优异&#xff0c;主要体现在以下几个方面&#xff1a; 1. 技术优势 性能表现: Claude模型在处理复杂任务&#xff08;如编程、自然语言…...

[0405].第05节:搭建Redis主从架构

Redis学习大纲 一、3主3从的集群配置&#xff1a; 1.1.集群规划 1.分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 2.每组是一主一从&#x…...

01、kafka知识点综合

kafka是一个优秀大吞吐消息队列&#xff0c;下面我就从实用的角度来讲讲kafka中&#xff0c;“kafka为何有大吞吐的机制”&#xff0c;“数据不丢失问题”&#xff0c;“精准一次消费问题” 01、kafka的架构组织和运行原理 kafka集群各个节点的名称叫broker&#xff0c;因为kaf…...

K8S集群常用命令

1&#xff0c;查看pod kubectl get pods -A 查看所有的pod kubectl get pods 这个只查看namespace为default下的pod&#xff0c;也就是只查看默认命名空间下的pod kubectl get pod -A -o wide 查看所有的pod&#xff0c;并且放出的信息更全&#xff08;包含了pod的ip&#xff0…...

数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall

数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(fre…...

【ubuntu24.04】配置ssh以root登录

ubuntu默认不能以root登录 SSH 访问 Ubuntu 时,root 用户登录提示 Access denied 的问题,通常是因为 Ubuntu 默认禁用了 root 用户通过 SSH 登录。这是出于安全性考虑的默认配置。原因分析 默认禁用 root 登录: 在 /etc/ssh/sshd_config 配置文件中,PermitRootLogin 默认…...

python学opencv|读取图像(二十九)使用cv2.getRotationMatrix2D()函数旋转缩放图像

【1】引言 前序已经学习了如何平移图像&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;二十七&#xff09;使用cv2.warpAffine&#xff08;&#xff09;函数平移图像-CSDN博客 在此基础上&#xff0c;我们尝试旋转图像的同时缩放图像。 【2】…...

Python语言的编程范式

Python语言的编程范式探讨 引言 在当今的编程世界中&#xff0c;Python语言以其简洁、易读和强大的功能深受开发者的喜爱。作为一种多范式编程语言&#xff0c;Python支持多种编程风格&#xff0c;包括面向对象编程&#xff08;OOP&#xff09;、函数式编程和命令式编程等。每…...

JAVA多线程学习

文章目录 线程相关概念线程创建继承Thread类Runnable接口多个线程同时操作同一个对象测试&#xff1a;实现callable接口(了解)静态代理lamda表达式 线程状态线程停止线程休眠线程礼让 线程相关概念 线程&#xff1a;是进程的一部分&#xff0c;一个进程之内的线程之间共享进程的…...

【c语言】指针 (完结)

一、sizeof和strlen的对比 1、sizeof 前面我们在学习操作符的时候&#xff0c;我们学习了sizeof&#xff0c;知道其是计算变量所占内存的大小的&#xff0c;单 位是字节&#xff0c;如果操作数是数据类型的话&#xff0c;计算的就是这个类型的变量所占的内存空间的大…...

vue使用自动化导入api插件unplugin-auto-import,避免频繁手动导入

‌unplugin-auto-import‌是一个现代的自动导入插件&#xff0c;旨在简化前端开发中的导入过程&#xff0c;减少手动导入的繁琐工作&#xff0c;提升开发效率。它支持多种构建工具&#xff0c;包括Vite、Webpack、Rollup和esbuild&#xff0c;并且可以与TypeScript配合使用&…...