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

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

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

相关文章

UE5 打包项目

UE5 打包项目 flyfish 通过 “文件”->“打开项目”&#xff0c;然后在弹出的对话框中选择项目文件&#xff08;通常是以.uproject为后缀的文件&#xff09; 选择目标平台&#xff1a; 在 UE5 主界面中&#xff0c;找到 “平台”&#xff08;Platforms&#xff09;。根据…

1. Doris分布式环境搭建

一. 环境准备 本次测试集群采用3台机器hadoop1、hadoop2、hadoop3, Frontend和Backend部署在同一台机器上&#xff0c;Frontend部署3台组成高可用&#xff0c;Backend部署3个节点&#xff0c;组成3副本存储。 主机IP操作系统FrontendBackendhadoop1192.168.47.128Centos7Foll…

win10电脑 定时关机

win10电脑 定时关机 https://weibo.com/ttarticle/p/show?id2309405110707766296723 二、使用任务计划程序设置定时关机打开任务计划程序&#xff1a; 按下“Win S”组合键&#xff0c;打开搜索框。 在搜索框中输入“任务计划程序”&#xff0c;然后点击搜索结果中的“任务…

day07_Spark SQL

文章目录 day07_Spark SQL课程笔记一、今日课程内容二、Spark SQL函数定义&#xff08;掌握&#xff09;1、窗口函数2、自定义函数背景2.1 回顾函数分类标准:SQL最开始是_内置函数&自定义函数_两种 2.2 自定义函数背景 3、Spark原生自定义UDF函数3.1 自定义函数流程&#x…

Hadoop3.x 万字解析,从入门到剖析源码

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

Java 实现 Elasticsearch 查询当前索引全部数据

Java 实现 Elasticsearch 查询当前索引全部数据 需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后 需求背景 通常情况下&#xff0c;Elasticsearch 为了提高查询效率&#xff0c;对于不指定分页查询条数的查询语句&#xff0c;默认会返回10条数据。那么这就会有…

Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图

可以根据地理空间数据连接两个索引。在本教程中&#xff0c;我将向你展示如何通过混合邻里多边形和 GPS 犯罪事件坐标来创建纽约市的犯罪地图。 安装 如果你还没有安装好自己的 Elasticsearch 及 Kibana 的话&#xff0c;请参考如下的链接来进行安装。 如何在 Linux&#xff0…

C#学习笔记 --- 简单应用

1.operator 运算符重载&#xff1a;使自定义类可以当做操作数一样进行使用。规则自己定。 2.partial 分部类&#xff1a; 同名方法写在不同位置&#xff0c;可以当成一个类使用。 3.索引器&#xff1a;使自定义类可以像数组一样通过索引值 访问到对应的数据。 4.params 数…

【Flink】Flink内存管理

Flink内存整体结构图&#xff1a; JobManager内存管理 JVM 进程总内存(Total Process Memory)Flink总内存(Total Flink Memory)&#xff1a;JVM进程总内存减去JVM Metaspace(元空间)和JVM Overhead(运行时开销)上图解释&#xff1a; JVM进程总内存为2G;JVM运行时开销(JVM Overh…

MYSQL8创建新用户报错:You have an error in your SQL syntax;check...

本文所用——MYSQL版本&#xff1a;8.0.25 baidu都是直接创建新用户并赋权&#xff0c;如下&#xff1a; GRANT ALL PRIVILEGES ON *.* TO 用户名% IDENTIFIED BY 密码 WITH GRANT OPTION;但是我用的MYSQL版本它就不行&#xff0c;会报错&#xff01; 经查阅资料发现——MY…

力扣经典练习题之198.打家劫舍

今天继续给大家分享一道力扣的做题心得今天这道题目是198.打家劫舍,这是一道非常经典的问题,在动态规划中经常考到这类问题,题目如下: 题目链接:198.打家劫舍 1,题目分析 首先此题就是给我们了一个数组,代表可以偷的房屋中的对应的金额,我们是一个小偷,一次可以偷很多…

万物互联的背后:MCU嵌入式硬件的奇幻之旅

文章背景&#xff1a;嵌入式硬件是什么&#xff1f; 你可能听说过嵌入式硬件&#xff0c;却总觉得它像是实验室里神秘的玩意儿。其实&#xff0c;它就在我们身边——从你手上的智能手表到车里的倒车雷达&#xff0c;无一不是嵌入式硬件的“杰作”。想象一块小小的电路板&#x…

LabVIEW数据库管理系统

LabVIEW数据库管理系统&#xff08;DBMS&#xff09;是一种集成了数据库技术与数据采集、控制系统的解决方案。通过LabVIEW的强大图形化编程环境&#xff0c;结合数据库的高效数据存储与管理能力&#xff0c;开发人员可以实现高效的数据交互、存储、查询、更新和报告生成。LabV…

如何在 Linux、MacOS 以及 Windows 中打开控制面板

控制面板不仅仅是一系列图标和菜单的集合&#xff1b;它是通往优化个人计算体验的大门。通过它&#xff0c;用户可以轻松调整从外观到性能的各种参数&#xff0c;确保他们的电脑能够完美地适应自己的需求。无论是想要提升系统安全性、管理硬件设备&#xff0c;还是简单地改变桌…

python 轮廓 获取环形区域

目录 效果图&#xff1a; 代码&#xff1a; 效果图&#xff1a; 代码&#xff1a; import cv2 import numpy as np# 读取图像 image cv2.imread(rE:\project\jijia\tools_jijia\img_tools\ground_mask.jpg, cv2.IMREAD_GRAYSCALE) # 二值化图像 # 二值化图像 _, binary cv…

Clickhouse基础(一)

数据存储的目录&#xff0c;在存储数据时是先经过压缩后再存储的&#xff0c;压缩效率很高 操作命令&#xff1a; sudo clickhouse start sudo clickhouse restart sudo clickhouse status进入clickhouse clickhouse-client -mCREATE TABLE db_13.t_assist (modelId UInt64,…

基于spingbott+html+Thymeleaf的24小时智能服务器监控平台设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

从 SQL 语句到数据库操作

1. SQL 语句分类 数据定义语言 DDL &#xff1a; 用于定义或修改数据库中的结构&#xff0c;如&#xff1a;创建、修改、删除数据库对象。create、drop alter 数据操作语言 DML &#xff1a; 用于添加、删除、更新数据库中的数据。select、insert alter、drop 数据控制语言 D…

Excel中SUM求和为0?难道是Excel有Bug!

大家好&#xff0c;我是小鱼。 在日常工作中有时会遇到这样的情况&#xff0c;对Excel表格数据进行求和时&#xff0c;结果竟然是0&#xff0c;很多小伙伴甚至都怀疑是不是Excel有Bug&#xff01;其实&#xff0c;在WPS的Excel表格中数据求和&#xff0c;结果为0无法正确求和的…

【简博士统计学习方法】第2章:3. 感知机——学习算法之对偶形式:算法解说

3. 感知机——学习算法之对偶形式&#xff1a;算法解说 3.4 对偶形式 在原始形式中&#xff0c;若 ( x i , y i ) (x_i,y_i) (xi​,yi​)为误分类点&#xff0c;可如下更新参数&#xff1a; w ← w η y i x i ; b ← b η y i w \leftarrow w\eta y_{i} x_{i} ; \quad b …