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

Vue学习笔记集--六大指令

内容渲染指令

内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。常用的内容渲染指令有如下2 个:

v-text(类似innerText)

    • 使用语法:<p v-text="name">hello</p>,意思是将 name 值渲染到 p 标签中
    • 类似 innerText,使用该语法,会覆盖 p 标签原有内容

v-html(类似 innerHTML)

    • 使用语法:<p v-html="intro">hello</p>,意思是将 intro 值渲染到 p 标签中
    • 类似 innerHTML,使用该语法,会覆盖 p 标签原有内容
    • 类似 innerHTML,使用该语法,能够将HTML标签的样式呈现出来。

条件渲染指令

条件判断指令,用来辅助开发者按需控制 DOM 的显示与隐藏。条件渲染指令有如下两个,分别是:

v-show

  1. 作用: 控制元素显示隐藏
  2. 语法: v-show = “表达式” 表达式值为 true 显示, false 隐藏
  3. 原理: 切换 display:none 控制显示隐藏
  4. 场景:频繁切换显示隐藏的场景

v-if

  1. 作用: 控制元素显示隐藏(条件渲染)
  2. 语法: v-if= “表达式” 表达式值 true显示, false 隐藏
  3. 原理: 基于条件判断,是否创建 或 移除元素节点
  4. 场景: 要么显示,要么隐藏,不频繁切换的场景

事件绑定指令

methods

基本定义

methods 是 Vue 实例或组件的一个选项,值为一个对象,对象中定义组件的方法:

export default {methods: {methodName() {// 逻辑代码},// 其他方法...}
}

核心特性
(1) 绑定 this
  • 方法中的 this 自动绑定到 Vue 实例,可以直接访问 datapropscomputed 等属性:

    methods: {increment() {this.count++; // 直接操作 data 中的 count}
    }
    
(2) 模板中调用
  • 在模板中通过 v-on(或 @)绑定事件,或在插值中直接调用:

    <button @click="increment">点击增加</button>
    <p>{{ formatDate() }}</p>
    
(3) 传递参数
  • 支持手动传递参数,包括原生事件对象 $event

    <button @click="say('Hello', $event)">传递参数</button>
    
    methods: {say(message, event) {console.log(message, event.target);}
    }
    

与事件处理的结合

methods 常与 v-on 配合,处理用户交互事件:

<template><button @click="handleClick">点击</button><input @input="handleInput">
</template><script>
export default {methods: {handleClick() {alert('按钮被点击!');},handleInput(event) {console.log('输入内容:', event.target.value);}}
}
</script>

与 computed 的区别
methodscomputed
每次调用都会执行基于依赖缓存,依赖不变时复用
适合处理事件或需要主动触发的逻辑适合派生数据(如过滤、计算)
可以在模板中调用(如 {{ method() }}在模板中作为属性使用(如 {{ computedProp }}

示例对比:

data() {return { firstName: 'John', lastName: 'Doe' };
},
methods: {fullNameMethod() {return this.firstName + ' ' + this.lastName; // 每次调用都重新计算}
},
computed: {fullNameComputed() {return this.firstName + ' ' + this.lastName; // 缓存结果,依赖不变时不重新计算}
}

异步操作

methods 中可执行异步操作(如 API 请求):

methods: {async fetchData() {try {const response = await axios.get('/api/data');this.data = response.data;} catch (error) {console.error('请求失败:', error);}}
}

避免箭头函数
  • 避免在 methods 中使用箭头函数,否则 this 不会绑定到 Vue 实例:

    // ❌ 错误:箭头函数导致 this 指向错误
    methods: {badMethod: () => {console.log(this); // 指向 Window 或 undefined(严格模式)}
    }// ✅ 正确:普通函数确保 this 正确
    methods: {goodMethod() {console.log(this); // 指向 Vue 实例}
    }
    

在生命周期钩子中调用

可以在生命周期钩子(如 createdmounted)中调用方法:

export default {created() {this.initData(); // 组件创建时调用方法},methods: {initData() {// 初始化逻辑}}
}

最佳实践
  1. 单一职责:每个方法专注于一个任务,提高可维护性。
  2. 避免直接操作 DOM:优先通过数据驱动视图,而非直接操作 DOM。
  3. 命名清晰:使用动词命名方法(如 handleClickfetchData)。
  4. 复用逻辑:复杂逻辑封装为方法,避免在模板中写过多表达式。

完整示例
<template><div><button @click="increment">计数:{{ count }}</button><input type="text" @input="updateValue"placeholder="输入内容..."><p>输入的内容:{{ inputValue }}</p></div>
</template><script>
export default {data() {return {count: 0,inputValue: ''};},methods: {increment() {this.count++;},updateValue(event) {this.inputValue = event.target.value;}}
}
</script>

computed

在 Vue 中,computed 是用于定义计算属性的核心选项,它基于响应式依赖进行缓存,适合处理需要根据其他数据动态计算的场景。


核心特性
  • 响应式依赖computed 属性会追踪其依赖的响应式数据(如 dataprops、其他 computed),当依赖变化时自动重新计算。
  • 缓存机制:只有当依赖变化时才会重新计算,否则直接返回缓存结果,性能高效。
  • 声明式逻辑:将复杂逻辑封装为计算属性,避免模板中写过多表达式。

基本语法
export default {computed: {属性名() {// 基于其他数据计算并返回值return this.data1 + this.data2;}}
}

模板中使用

<template><p>总价:{{ totalPrice }}</p>
</template>

适用场景
(1) 数据派生

将多个数据组合成一个新值:

data() {return { firstName: '张', lastName: '三' };
},
computed: {fullName() {return this.firstName + ' ' + this.lastName; // "张 三"}
}
(2) 复杂计算

如过滤列表、数学运算等:

data() {return { items: [ { price: 10 }, { price: 20 } ] };
},
computed: {totalPrice() {return this.items.reduce((sum, item) => sum + item.price, 0); // 30}
}
(3) 格式化数据

如日期格式化、文本截断:

computed: {formattedDate() {return new Date(this.rawDate).toLocaleDateString();}
}

methods 的对比
computedmethods
基于依赖缓存,依赖不变时直接返回结果每次调用都会重新执行
通过属性名访问(无括号)通过方法调用(需括号)
适合派生数据(如组合、计算)适合执行操作(如事件处理)

示例对比

<template><!-- computed:高效,依赖不变时不会重复计算 --><p>{{ fullName }}</p><!-- methods:每次渲染都会调用 --><p>{{ getFullName() }}</p>
</template>

计算属性的 Setter

默认只有 getter,但可以手动定义 setter(较少用):

computed: {fullName: {get() {return this.firstName + ' ' + this.lastName;},set(newValue) {// 当修改 fullName 时,拆解并更新依赖数据const names = newValue.split(' ');this.firstName = names[0];this.lastName = names[1] || '';}}
}

最佳实践
  1. 避免副作用computed 应专注于计算,不要执行异步操作或修改外部状态。
  2. 拆分复杂逻辑:若计算逻辑复杂,可拆分为多个计算属性,提高可读性。
  3. 依赖明确:确保依赖的响应式数据清晰,避免依赖非响应式数据。

完整示例
<template><div><input v-model="price" type="number" placeholder="单价"><input v-model="quantity" type="number" placeholder="数量"><p>总价:{{ totalPrice }}</p><p>含税价:{{ taxedTotalPrice }}</p></div>
</template><script>
export default {data() {return {price: 0,quantity: 0,taxRate: 0.1};},computed: {totalPrice() {return this.price * this.quantity;},taxedTotalPrice() {return this.totalPrice * (1 + this.taxRate);}}
}
</script>

常见问题

Q1: computed 中可以调用异步方法吗?

  • 不建议!computed 设计用于同步计算,异步操作应放在 methodswatch 中。

Q2: computed 依赖非响应式数据会怎样?

  • 如果依赖的数据不是响应式的(如未在 data 中定义),计算属性不会自动更新。

Q3: computedwatch 的区别?

  • computed:声明式派生数据,依赖多个值。
  • watch:监听单个值的变化,执行副作用(如异步请求、复杂逻辑)。

总结

computed 是 Vue 中处理复杂数据逻辑的利器,通过缓存机制提升性能,保持代码简洁。

优先使用 computed 替代模板内复杂表达式!

v-on

基本语法
<button v-on:事件类型="处理函数或表达式">按钮</button>
  • 事件类型:如 clickinputkeydown 等。
  • 处理函数:在 Vue 实例的 methods 中定义的方法。
  • 简写:为 @,例如 @click="handler"
常见用法
绑定方法
<button v-on:click="greet">点击</button>
methods: {greet() {alert('Hello!');}
}
内联表达式
<button @click="count += 1">增加计数:{{ count }}</button>
传递参数
<button @click="say('Hi', $event)">传递参数</button>
methods: {say(message, event) {alert(message);console.log(event.target); // 访问原生事件对象}
}

事件修饰符

Vue 提供修饰符简化常见事件处理逻辑,通过链式调用:

修饰符作用
.stop阻止事件冒泡(event.stopPropagation()
.prevent阻止默认行为(event.preventDefault()
.capture使用捕获模式触发事件
.self仅当事件在元素自身(非子元素)触发时执行
.once事件仅触发一次
.passive提升滚动性能(与 prevent 冲突)

示例:

<form @submit.prevent="onSubmit"></form>
<a @click.stop.prevent="doSomething"></a>

按键修饰符

用于监听特定键盘按键:

<input @keyup.enter="submit"> <!-- 回车键触发 -->
<input @keyup.esc="clearInput"> <!-- ESC 键触发 --><input @keyup.enter=“submit”> <-- 回车键触发 -->
<input @keyup.esc=“clearInput”> <-- ESC 键触发 -->

支持按键别名(如 .enter.tab.esc)或按键码(如 @keyup.13)。


系统修饰键

监听组合按键(如 Ctrl + Click):

<button @click.ctrl="doSomething">Ctrl + 点击触发</button>
<input @keyup.ctrl.enter="submit"> <!-- Ctrl + Enter 触发 -->

修饰符包括:.ctrl.alt.shift.meta(Windows 的 Win 键,Mac 的 Command 键)。


动态事件名

通过动态绑定事件类型:

<button v-on:[eventName]="handler">动态事件</button>

eventName 可以是 Vue 实例的数据属性(如 focusmouseenter)。


对象语法

绑定多个事件:

<button v-on="{ mousedown: start, mouseup: end }">按钮</button>

总结
  • v-on 是 Vue 事件处理的核心指令,简化了 DOM 事件监听。
  • 通过修饰符(如 .stop.prevent)和按键处理,避免直接操作 DOM。
  • 结合 methods 中的方法实现逻辑复用,保持代码清晰。

完整示例:

<template><div><button @click="increment">{{ count }}</button><input @keyup.enter="submit"@input="onInput"@focus.capture="log('聚焦')"></div>
</template><script>
export default {data() {return { count: 0, inputValue: '' }},methods: {increment() { this.count++ },submit() { alert('提交:' + this.inputValue) },onInput(event) { this.inputValue = event.target.value },log(msg) { console.log(msg) }}
}
</script>

属性绑定指令

v-bind

v-bind 是 Vue.js 中用于动态绑定属性组件 Props的指令,它可以将 Vue 实例中的数据与 HTML 属性或组件 Props 进行绑定,实现数据到视图的动态响应。


核心功能
  1. 动态绑定 HTML 属性
    将 HTML 元素的属性(如 hrefsrcclassstyle 等)绑定到 Vue 实例的数据,当数据变化时,属性自动更新。

  2. 传递 Props 到子组件
    将父组件的数据传递给子组件的 Props,实现父子组件通信。

  3. 动态绑定属性名
    根据数据动态决定绑定的属性名(如 :[attributeName]="value")。


基本语法

简写:直接省略v-bind,只保留:

<!-- 完整语法 -->
<element v-bind:attribute="expression"></element><!-- 简写语法(推荐) -->
<element :attribute="expression"></element>
常见用法示例
1. 绑定普通属性
<!-- 绑定 href -->
<a :href="url">链接</a><!-- 绑定图片路径 -->
<img :src="imagePath"><!-- 动态禁用按钮 -->
<button :disabled="isDisabled">按钮</button>
2. 绑定 classstyle
<!-- 动态 class(对象语法) -->
<div :class="{ active: isActive, error: hasError }"></div><!-- 动态 class(数组语法) -->
<div :class="[activeClass, errorClass]"></div><!-- 动态 style(对象语法) -->
<div :style="{ color: textColor, fontSize: fontSize + 'px' }"></div><!-- 动态 style(数组语法) -->
<div :style="[baseStyles, overrideStyles]"></div>
3. 绑定对象(批量绑定属性)
<!-- 将对象的所有属性绑定到元素 -->
<div v-bind="attributeObject"></div>

对应的数据:

data() {return {attributeObject: {id: 'container',class: 'box','data-custom': '123'}}
}
4. 绑定 Props 到子组件
<!-- 父组件传递数据给子组件的 prop -->
<child-component :title="parentTitle" :content="parentContent"></child-component>
5. 动态属性名
<!-- 根据 dynamicAttrName 的值决定绑定的属性名 -->
<input :[dynamicAttrName]="value">

数据:

data() {return {dynamicAttrName: 'placeholder',value: '请输入内容'}
}

关键细节
  1. 表达式与静态值
    v-bind 的值是 JavaScript 表达式,而非字符串。例如:

    <!-- 传递一个布尔值 -->
    <button :disabled="isDisabled">按钮</button><!-- 传递一个数字 -->
    <input :max="10"><!-- 传递一个对象 -->
    <child-component :config="{ size: 'large', theme: 'dark' }"></child-component>
    
    1. 没有 v-bind 的陷阱
      如果直接写属性而不加 v-bind,Vue 会将其视为字符串:
 <!-- 传递字符串 'data.id' -->
<div id="data.id"></div><!-- 传递变量 data.id 的值 -->
<div :id="data.id"></div>
  1. 修饰符(Modifiers)

    • .prop:强制将属性绑定为 DOM 属性(而非 HTML 属性)。

      <div :some-prop.prop="value"></div>
      
    • .camel:将属性名从短横线格式转为驼峰格式(用于模板中使用短横线命名的属性)。

      <svg :view-box.camel="viewBox"></svg>
      

列表渲染指令

v-for

在 Vue.js 中,v-for 是用于循环渲染列表数据的核心指令,可以遍历数组、对象或数字,生成动态的 DOM 元素或组件。


基本语法
<template v-for="(item, index) in list" :key="唯一标识"><!-- 渲染内容 -->
</template>
  • item: 当前遍历的元素(数组项、对象值、数字迭代值)。
  • index: 当前项的索引(仅数组和对象遍历时可用)。
  • :key: 必须提供唯一标识(用于 Vue 的虚拟 DOM 高效更新)。

常见用法示例
1. 遍历数组
<ul><li v-for="(item, index) in items" :key="item.id">{{ index }} - {{ item.name }}</li>
</ul>

数据:

data() {return {items: [{ id: 1, name: 'Apple' },{ id: 2, name: 'Banana' },]}
}
2. 遍历对象
<div v-for="(value, key, index) in object" :key="key">{{ index }}. {{ key }}: {{ value }}
</div>

数据:

data() {return {object: {name: 'John',age: 30}}
}
3. 遍历数字
<span v-for="n in 5" :key="n">{{ n }}</span>
<!-- 输出:1 2 3 4 5 -->
4. 遍历组件
<child-component v-for="item in items" :key="item.id":item-data="item"
/>

核心规则
1. 必须绑定 :key
  • 通过 :key 提供唯一标识(如 item.id),避免用索引 index(除非列表静态不变)。

  • 错误示例:

    <div v-for="(item, index) in items" :key="index"></div>
    

    当列表顺序变化时,用 index 作为 key 会导致渲染错误或性能问题。

2. 响应式更新
  • Vue 能检测以下数组方法自动触发更新:

    push(), pop(), shift(), unshift(), splice(), sort(), reverse()
    
  • 直接修改数组索引或长度不会触发更新

    // 错误!不会更新视图
    this.items[0] = { id: 3, name: 'Orange' };
    // 正确做法
    this.items.splice(0, 1, { id: 3, name: 'Orange' });
    
3. v-forv-if 的优先级
  • Vue 2v-for 优先级高于 v-if,不推荐同时使用。

  • Vue 3v-if 优先级高于 v-for

  • 最佳实践:用计算属性过滤数据,避免同时使用:

    <template v-for="item in filteredItems" :key="item.id"><div v-if="item.isActive">{{ item.name }}</div>
    </template>
    

常见问题
1. 为什么列表渲染不更新?
  • 原因:直接修改数组或对象未触发响应式。

  • 解决:使用变异方法(如 push)或 Vue.set/this.$set

    // 动态添加对象属性
    this.$set(this.object, 'newKey', 'newValue');
    
2. 如何遍历多层嵌套数据?

用嵌套的 v-for

<div v-for="group in groups" :key="group.id"><div v-for="item in group.items" :key="item.id">{{ item.name }}</div>
</div>
3. 如何跳过某些元素?

结合 v-if 或计算属性过滤:

<div v-for="item in items" :key="item.id" v-if="item.isVisible"></div>

双向绑定指令

v-model

v-model 是 Vue.js 中用于实现表单输入元素与数据双向绑定的核心指令,它能将表单控件(如 <input><textarea><select>)的值与 Vue 实例的数据自动同步,无需手动操作 DOM。


核心机制
  • 双向绑定
    v-modelv-bind(数据到视图)和 v-on(视图到数据)的语法糖。
    • 数据 → 视图:将数据绑定到表单元素的 value/checked 属性。
    • 视图 → 数据:监听表单元素的 inputchange 事件,更新数据。

基本用法
1. 绑定文本输入(<input type="text"><textarea>
<input v-model="message" placeholder="请输入内容">
<p>输入的内容是:{{ message }}</p>

数据:

data() {return {message: ''}
}
2. 绑定复选框(单个/多个)
<!-- 单个复选框(布尔值) -->
<input type="checkbox" v-model="isChecked"> 是否同意<!-- 多个复选框(数组) -->
<input type="checkbox" value="apple" v-model="fruits"> 苹果
<input type="checkbox" value="banana" v-model="fruits"> 香蕉

数据:

data() {return {isChecked: false,fruits: []}
}
3. 绑定单选框
<input type="radio" value="male" v-model="gender"><input type="radio" value="female" v-model="gender">

数据:

data() {return {gender: ''}
}
4. 绑定下拉框(<select>
<select v-model="selectedCity"><option value="beijing">北京</option><option value="shanghai">上海</option>
</select>

数据:

data() {return {selectedCity: ''}
}

修饰符(Modifiers)
1. .lazy

input 事件的同步改为 change 事件(输入完成后更新):

<input v-model.lazy="message">  <!-- 在输入框失焦后更新数据 -->
2. .number

将输入值自动转为数字类型:

<input v-model.number="age" type="number">  <!-- 输入 "30" → 30(数字) -->
3. .trim

自动去除输入内容的首尾空格:

<input v-model.trim="username">  <!-- 输入 "  John " → "John" -->

自定义组件中的 v-model

在组件中使用 v-model 可以实现父子组件数据的双向绑定。

Vue 2 用法
  • 默认绑定 value prop 和 input 事件。

  • 示例:

    <!-- 父组件 -->
    <custom-input v-model="message"></custom-input><!-- 子组件(CustomInput.vue) -->
    <template><input :value="value" @input="$emit('input', $event.target.value)">
    </template>
    <script>
    export default {props: ['value']
    }
    </script>
    
Vue 3 用法
  • 默认绑定 modelValue prop 和 update:modelValue 事件。

  • 支持多个 v-model 绑定:

    <!-- 父组件 -->
    <custom-input v-model:title="title" v-model:content="content"></custom-input><!-- 子组件 -->
    <template><input :value="title" @input="$emit('update:title', $event.target.value)"><input :value="content" @input="$emit('update:content", $event.target.value)">
    </template>
    <script>
    export default {props: ['title', 'content']
    }
    </script>
    
v-model的原理拆解

Vue 的 v-model 是一个语法糖,用于实现表单元素和组件的双向数据绑定。其核心原理可以拆解为以下部分:


1. 原生表单元素的双向绑定

对于原生表单元素(如 <input><textarea><select>),v-model 会根据元素类型自动绑定对应的属性和事件,实现双向更新:

  • 文本输入(text、textarea)

    <input v-model="message" />
    

    等价于:

    <input :value="message" @input="message = $event.target.value" 
    />
    
    • 绑定 value 属性,监听 input 事件。
  • 复选框(checkbox)

    <input type="checkbox" v-model="checked" />
    

    等价于:

    <input type="checkbox" :checked="checked" @change="checked = $event.target.checked" 
    />
    
    • 绑定 checked 属性,监听 change 事件。
  • 单选按钮(radio)下拉框(select)
    类似逻辑,绑定 value 和监听 change 事件。


2. 自定义组件的双向绑定

在自定义组件中,v-model 默认绑定 modelValue 属性和 update:modelValue 事件(Vue 3):

父组件使用:
<CustomComponent v-model="message" />

等价于:

<CustomComponent :modelValue="message" @update:modelValue="newValue => message = newValue" 
/>
子组件实现:
// 接收父组件传递的 modelValue
props: ['modelValue'],// 触发更新事件
emits: ['update:modelValue'],
methods: {handleChange(e) {this.$emit('update:modelValue', e.target.value);}
}

3. 多个 v-model 绑定(Vue 3+)

Vue 3 允许通过参数绑定多个 v-model,例如:

<CustomComponent v-model:title="title" v-model:content="content" 
/>

等价于:

<CustomComponent :title="title" @update:title="newTitle => title = newTitle" :content="content" @update:content="newContent => content = newContent" 
/>

4. 修饰符处理

v-model 支持修饰符,用于对输入值进行处理:

  • .lazy:将 input 事件改为 change 事件(延迟同步)。
  • .trim:自动去除首尾空格。
  • .number:将输入转为数值类型。
<input v-model.lazy.trim.number="value" />

5. 底层实现机制
  1. 模板编译:Vue 编译器将 v-model 转换为对应的属性和事件绑定。
  2. 响应式系统:数据变化通过 Vue 的响应式系统驱动视图更新。
  3. 事件监听:用户输入触发事件,更新数据层,形成闭环。

总结

v-model 的核心是 语法糖,通过自动绑定属性事件实现双向数据流:

  • 对原生元素:根据类型绑定 value/checked 属性和 input/change 事件。
  • 对组件:默认绑定 modelValueupdate:modelValue,支持自定义参数和多个绑定。
  • 结合修饰符,可灵活处理输入值。

相关文章:

Vue学习笔记集--六大指令

内容渲染指令 内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。常用的内容渲染指令有如下2 个&#xff1a; v-text&#xff08;类似innerText&#xff09; 使用语法&#xff1a;<p v-text"name">hello</p>&#xff0c;意思是将 name 值渲染到 p 标…...

.net 6程序在IIS中部署后点击IIS设置报错“执行此操作时出错”

.net 6写的程序&#xff0c;需要在Windows服务器的IIS中部署&#xff0c;由于是刚装的系统&#xff0c;先安装.net 6运行时&#xff0c;装了才发现没有IIS&#xff0c;于是又通过“添加角色和功能”添加与IIS相关的功能。安装完毕后&#xff0c;在IIS中添加网站&#xff0c;并将…...

《从零手写Linux Shell:详解进程控制、环境变量与内建命令实现 --- 持续更新》

承接上文Linux 进程的创建、终止、等待与程序替换保姆级讲解-CSDN博客&#xff0c;涉及所用到的代码&#xff0c;本文所绑定的资源就是上篇文章的主要代码。 完整代码在文章末尾 目录 1.实现编写代码输出一个命令行 a.如何获取自己的用户名&#xff0c;主机名&#xff0c;路径…...

【Go语言圣经2.4】

目标 理解 在 Go 中&#xff0c;赋值操作既包括最基本的形式&#xff08;左边一个变量&#xff0c;右边一个表达式&#xff09;&#xff0c;也包括复合赋值、元组赋值和隐式赋值。表达式求值的顺序、变量更新时的副作用以及如何处理多返回值和下划线&#xff08;_&#xff09…...

运维工具推荐 -- 宝塔面板:一键部署服务器

标题&#xff1a;宝塔面板&#xff1a;一键部署服务器&#xff0c;轻松管理你的云端世界 引言 在数字化时代&#xff0c;服务器管理对于个人开发者、中小企业或站长来说既是机遇也是挑战。手动配置服务器环境耗时费力&#xff0c;而 宝塔面板 作为一款 免费开源、功能全面 的服…...

C# 异常处理‌的核心概念

文章目录 一、异常处理的核心概念‌‌二、C# 异常处理的基本语法‌‌三、常见异常类型‌‌四、最佳实践‌‌五、示例&#xff1a;文件读取异常处理‌‌六、总结‌ C# 异常处理‌的详细说明&#xff0c;包括核心概念、使用方法和最佳实践&#xff1a; 一、异常处理的核心概念‌ …...

腾讯云点播key防盗链生成到期自动失效url

package com.xmkjsoft.protect_key;import java.nio.charset.StandardCharsets; import java.security.MessageDigest;public class TencentKeyAntiTheft {private static final String SECRET_KEY ""; // 请替换为腾讯云 VOD 控制台中的 Key/*** 生成腾讯云 Key 防…...

深入 Spring Boot 注解

深入 Spring Boot 注解&#xff1a;我的开发心得与常用注解详解 大家好&#xff0c;我是 [你的 CSDN 昵称/名字]&#xff0c;一位热爱 Spring Boot 的技术博主。 在多年的 Spring Boot 开发实践中&#xff0c;我深深体会到注解的强大魅力。它们不仅让代码变得更简洁&#xff0…...

k8s环境部署

四台机器 分别是 k8s-master&#xff1a;172.25.254.100 k8s-node1&#xff1a;172.25.254.10 k8s-node2&#xff1a;172.25.254.20 docker-harbor&#xff1a;172.25.254.200 reg.timinglee.org 四台机器分别配置好网络和软件仓库 做好地址解析 scp -r /etc/hosts/ root17…...

CentOS 系统安装 docker 以及常用插件

博主用的的是WindTerm软件链接的服务器&#xff0c;因为好用 1.链接上服务器登入后&#xff0c;在/root/目录下 2.执行以下命令安装docker sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo…...

谷歌云服务器:服务器怎么安装???

谷歌云服务器&#xff1a;服务器怎么安装&#xff1f;&#xff1f;&#xff1f; 以下是详细分步指南&#xff0c;帮助你在 Google Cloud Platform (GCP) 上快速创建并配置云服务器&#xff08;Compute Engine 实例&#xff09;&#xff0c;并安装所需环境&#xff1a; 一、准备…...

Redis--Zset类型

目录 一、引言 二、介绍 三、命令 1.zadd 2.zrange&#xff0c;zrevrange&#xff0c;zrangebyscore 3.zcard&#xff0c;zcount 4.zpopmax&#xff0c;bzpopmax&#xff0c;zpopmin&#xff0c;bzpopmin 5.zrank,zrevrank,zscore 6.zrem&#xff0c;zremrangebyrank&a…...

《阿里云Data+AI:开启数据智能新时代》电子书上线啦!

本书整理了阿里云在DataAI领域的最新实践案例与深度洞察&#xff0c;涵盖电商、游戏、营销、数字内容等多个行业的成功经验&#xff0c;以及技术专家对数据库与AI融合趋势的专业解读。 通过理论与实践的结合&#xff0c;我们将共同探索DataAI如何成为企业智能化转型的核心驱动…...

图像处理篇---图像预处理

文章目录 前言一、通用目的1.1 数据标准化目的实现 1.2 噪声抑制目的实现高斯滤波中值滤波双边滤波 1.3 尺寸统一化目的实现 1.4 数据增强目的实现 1.5 特征增强目的实现&#xff1a;边缘检测直方图均衡化锐化 二、分领域预处理2.1 传统机器学习&#xff08;如SVM、随机森林&am…...

Vue 3 事件总线详解:构建组件间高效通信的桥梁

Vue 3 事件总线详解&#xff1a;构建组件间高效通信的桥梁 为什么需要事件总线&#xff1f;使用 mitt 实现事件总线1. 安装 mitt2. 创建事件总线3. 在组件中使用事件总线发送端组件&#xff08;例如 ComponentA.vue&#xff09;接收端组件&#xff08;例如 ComponentB.vue&…...

Golang编译器DIY,手搓 if err != nil { return err } 语法糖

前序 在go的社区里&#xff0c;下面这三行代码是被吐槽的最多的 if err ! nil {return err }从代码之整洁美观的角度看&#xff0c;这样的写法也是让人不舒服的。尤其是 当有很多错误需要处理的时候&#xff0c;就会发现通篇都是这三行。 所以想着看看修改一下编译器&#xf…...

图解多头注意力机制:维度变化一镜到底

目录 一、多头注意力机制概述二、代码实现1. pyTorch 实现2. tensorFlow实现 三、维度变化全流程详解1. 参数设定2. 维度变化流程图3. 关键步骤维度变化 四、关键实现细节解析1. 多头拆分与合并2. 注意力分数计算3. 掩码处理技巧 五、完整运行示例六、总结与常见问题1. 核心优势…...

.NET_Prism基本项目创建

Prism简述 模块&#xff08;Module&#xff09;&#xff1a;独立的功能单元&#xff0c;可动态加载。依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;&#xff1a;通过 IoC 容器&#xff08;如 Unity、Autofac&#xff09;管理模块之间的依赖关系。&#…...

BigEvent项目后端学习笔记(一)用户管理模块 | 注册登录与用户信息全流程解析(含优化)

&#x1f4d6; 模块概述 用户管理模块是系统的核心基础模块&#xff0c;包含 注册、登录、用户信息维护 等功能。本模块涉及 JWT Token认证、密码加密存储、文件上传 等关键技术点&#xff0c;是理解前后端分离架构中安全与数据交互的典型实践。本篇对于原项目进行了代码优化&…...

[ISP] 人眼中的颜色

相机是如何记录颜色的&#xff0c;又是如何被显示器还原的&#xff1f; 相机通过记录RGB数值然后显示器显示RGB数值来实现颜色的记录和呈现。道理是这么个道理&#xff0c;但实际上各厂家生产的相机对光的响应各不相同&#xff0c;并且不同厂家显示器对三原色的显示也天差地别&…...

解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南

文章目录 解锁MySQL 8.0.41源码调试&#xff1a;Mac 11.6CLion 2024.3.4实战指南前期准备环境搭建详细步骤安装 CLion安装 CMake 3.30.5准备 MySQL 8.0.41 源码配置 CMake 选项构建 MySQL 项目 调试环境配置与验证配置 LLDB 调试器启动调试验证调试环境 总结与拓展 解锁MySQL 8…...

celery入门

按照Celery 官方文档&#xff0c;用 Django Celery Redis 写的一个简单项目 如需转载&#xff0c;标记出处 环境准备 1. 安装依赖 pip install django celery redis 创建 Django 项目 1. 创建 Django 项目和 APP django-admin startproject myproject cd myproject python …...

关于xcode Project navigator/项目导航栏的一些说明

本文基于 xcode12.4 版本做说明 首先要明确一点&#xff0c;导航栏这里展示的并不是当前工程在电脑硬盘中的文件结构&#xff0c;它展示的是xxxxxx.xcodeproj/project.pbxproj文件(后文简.pbxproj文件)中的内容。我们在导航栏中的操作就是修改该文件&#xff0c;有些操作会修…...

深度解析扣减系统设计:从架构到实践

背景 在当今数字化业务蓬勃发展的时代&#xff0c;扣减系统在众多业务场景中扮演着关键角色。无论是电商平台的库存扣减&#xff0c;还是金融领域的资金扣减、积分系统的积分扣减&#xff0c;一个高效、可靠且数据一致的扣减系统都是业务稳健运行的基石。本文将深入探讨扣减系…...

视觉定位项目中可以任意修改拍照点位吗?

修改拍照点位不是那么简单 1. 背景2. 修改拍照点位意味着什么&#xff1f;3. 如何解决这个问题&#xff1f; 1. 背景 在视觉定位的项目中&#xff0c;会遇到这么一种情况&#xff1a;完成三步&#xff08;9点标定&#xff0c;旋转中心标定&#xff0c;示教基准&#xff09;之…...

深度学习常用操作笔记

深度学习常用操作笔记 指令报错cannot import name Config from mmcvImportError: cannot import name print_log from mmcvImportError: cannot import name init_dist from mmengine.runnerWARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNon…...

C++学习内存管理

1.概念的介绍 总括&#xff1a; 1. 栈&#xff08;Stack&#xff09; 存储内容&#xff1a; 局部变量&#xff08;包括函数参数、非静态局部变量&#xff09;。 函数调用的上下文信息&#xff08;如返回地址、寄存器状态等&#xff09;。 特点&#xff1a; 内存由编译器自动…...

git使用。创建仓库,拉取分支,新建分支开发

文章目录 安装 git自己新建仓库&#xff0c;进行代码管理合作开发的流程拉去主分支代码查看本地分支的状态查看远程分支查看远程的仓库信息本地分支切换切换并创建分支提交代码 made by NJITZX git 是一个版本控制工具&#xff0c;真正开发项目中是多个人开发一个项目的&#…...

itsdangerous加解密源码分析|BUG汇总

这是我这两天的思考 早知道密码学的课就不旷那么多了 纯个人见解 如需转载&#xff0c;标记出处 目录 一、官网介绍 二、事例代码 源码分析&#xff1a; 加密函数dump源码使用的函数如下&#xff1a; 解密 ​编辑 ​编辑 关于签名&#xff1a; 为什么这个数字签名没有…...

常见限流算法及实现

1. 固定窗口计数器&#xff08;Fixed Window Counter&#xff09; 原理&#xff1a;在固定时间窗口&#xff08;如1分钟&#xff09;内统计请求数&#xff0c;超过阈值则拒绝后续请求。优点&#xff1a;实现简单&#xff0c;内存占用低。缺点&#xff1a;存在窗口切换时的流量…...