vue常用的指令用途和注意事项
v-bind
- 用途:动态绑定元素的属性或特性。
- 代码:
<template>
<img v-bind:src="imageSrc" alt="Vue logo">
<a v-bind:href="linkUrl">Click Here</a>
</template>
<script>
export default {
data() {
return {
imageSrc: 'https://vuejs.org/images/logo.png',
linkUrl: 'https://vuejs.org'
};
}
};
</script>
- 注意事项:
- v-bind 常用于绑定 HTML 属性,如 src、href、class 等。
- 简写形式 v-bind:attr 可以用冒号 : 来代替,如 :href=“linkUrl”。
v-if
- 用途:条件渲染,根据表达式的布尔值决定是否渲染元素。
- 代码:
<template>
<div v-if="isVisible">This content is visible!</div>
<button @click="isVisible = !isVisible">Toggle Visibility</button>
</template>
<script>
export default {
data() {
return {
isVisible: true
};
}
};
</script>
- 注意事项:
- v-if 会完全销毁和重新创建 DOM 元素,因此不适用于频繁切换的场景。
- 如果需要频繁切换元素的显示隐藏,使用 v-show 可能会更高效。
v-for
- 用途:循环渲染列表。
- 代码:
<template>
<ul>
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' }
]
};
}
};
</script>
- 注意事项:
- 使用 :key 为每个循环元素提供唯一标识符,以提高渲染性能。
- v-for 循环的数组或对象必须是响应式的。
v-model
- 用途:创建双向数据绑定,常用于表单输入。
- 代码:
<template>
<input v-model="message" placeholder="Type something">
<p>Your message: {{ message }}</p>
</template>
<script>
export default {
data() {
return {
message: ''
};
}
};
</script>
- 注意事项:
- v-model 默认绑定 value 属性和 input 事件,适用于表单控件。
- 自定义组件使用 v-model 时,需要在组件内部通过 model 属性定义绑定的 prop 名称和事件。
v-show
- 用途:条件渲染,根据表达式的布尔值控制元素的 display 样式。
- 代码:
<template>
<div v-show="isVisible">This content is visible!</div>
<button @click="isVisible = !isVisible">Toggle Visibility</button>
</template>
<script>
export default {
data() {
return {
isVisible: true
};
}
};
</script>
- 注意事项:
- v-show 不会销毁元素,而是通过修改元素的 display 属性来显示或隐藏。
- 如果需要频繁切换显示/隐藏,使用 v-show 性能较好,但首次渲染时会多一些开销。
v-bind:class 和 v-bind:style
- 用途:动态绑定元素的 class 或 style。
- 代码:
<template>
<div :class="{'active': isActive, 'text-red': isRed}" :style="{ color: activeColor, fontSize: fontSize + 'px' }">
This is a dynamic style and class binding example.
</div>
<button @click="toggleState">Toggle State</button>
</template>
<script>
export default {
data() {
return {
isActive: true,
isRed: false,
activeColor: 'blue',
fontSize: 16
};
},
methods: {
toggleState() {
this.isActive = !this.isActive;
this.isRed = !this.isRed;
}
}
};
</script>
- 注意事项:
- 使用对象语法,能够根据条件动态地为元素添加多个 class 或 style。
- 可以使用数组语法绑定多个 class。
v-on
- 用途:绑定事件监听器。
- 代码:
<template>
<button @click="handleClick">Click Me</button>
</template>
<script>
export default {
methods: {
handleClick() {
alert('Button clicked!');
}
}
};
</script>
- 注意事项:
- 可以使用 @ 来简写 v-on,例如 @click 等。
- 可以为事件传递修饰符,例如 .stop、.prevent 等。
v-slot
- 用途:用于自定义组件的插槽。
- 代码:
<template>
<base-layout>
<template v-slot:header>
<h1>Welcome to Vue.js</h1>
</template>
</base-layout>
</template>
<script>
export default {
components: {
BaseLayout: {
template: `
<div>
<slot name="header"></slot>
</div>
`
}
}
};
</script>
- 注意事项:
- v-slot 用于绑定具名插槽,允许在父组件中自定义子组件的内容。
- 可以通过 v-slot 语法进行命名插槽的传递。
总结
指令 | 用途 | 备注 |
---|---|---|
v-bind | 动态绑定元素属性 | 常用于绑定 class、style、href 等 |
v-if | 条件渲染,显示或隐藏元素 | 会销毁和重新创建 DOM 元素 |
v-for | 列表渲染 | 使用 :key 提升渲染性能 |
v-model | 双向数据绑定,表单输入 | 自定义组件使用时需要 model 属性 |
v-show | 条件渲染,控制元素的 display 样式 | 不销毁元素,仅改变样式 |
v-bind:class | 动态绑定 CSS 类 | 支持对象和数组语法 |
v-bind:style | 动态绑定样式 | 支持对象和数组语法 |
v-on | 事件监听 | 支持修饰符,如 .stop、.prevent 等 |
v-slot | 自定义插槽 | 用于自定义组件插槽的内容传递 |