在 Vue 3 中,大部分 Vue 2 中的指令保持了相同的用法。今天我们将讲讲Vue3的基本指令,带大家来了解一下它们的用法。
v-if
将 v-if
指令添加到 HTML 元素中,可以根据表达式的真假条件来进行条件性渲染。
示例:
xml
<template>
<div>
<button @click="toggleContent">Toggle Content</button>
<div v-if="showContent">
<p>This is the content to show.</p>
</div>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const showContent = ref(false);
function toggleContent() {
showContent.value = !showContent.value;
}
return { showContent, toggleContent };
},
};
</script>
在这个示例中,我们通过 ref
函数创建了一个名为 showContent
的响应式变量,并初始化为 false
。当用户点击按钮时,我们调用 toggleContent
方法来切换 showContent
的值,从而控制内容的显示和隐藏。
需要注意的是,在 Vue 3 中,由于引入了 setup
函数,我们需要在 setup
函数中返回一个包含模板中使用的所有变量和方法的对象。这个对象中的每个属性都可以在模板中直接使用,无需再通过 this
来访问。
v-for
v-for可以基于源数据多次渲染元素或模板块。
xml
<template>
<div>
<ul>
<li v-for="item in list" :key="item.id">{{ item.name }}</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
list: [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Orange' }
]
};
}
};
</script>
在上述示例中,我们通过 v-for
循环渲染了一个数组 list
中的元素。:key
是必需的,用于帮助 Vue 跟踪每个元素的身份,以提高性能。
另外,v-if
和 v-for
指令不能同时使用在同一个元素上。如果需要对一个列表进行条件渲染,可以将 v-if
放在列表项的容器元素上。例如:
xml
<template>
<div>
<button @click="toggleList">Toggle List</button>
<div v-if="showList">
<ul>
<li v-for="item in items" :key="item.id">{{ item.text }}</li>
</ul>
</div>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const showList = ref(false);
const items = ref([
{ id: 1, text: 'Item 1' },
{ id: 2, text: 'Item 2' },
{ id: 3, text: 'Item 3' },
]);
function toggleList() {
showList.value = !showList.value;
}
return { showList, items, toggleList };
},
};
</script>
在这个示例中,我们将 v-if
放在包含列表的 <div>
元素上,来对整个列表进行条件渲染。这样,当 showList
的值为 false
时,整个列表将被从 DOM 中移除。
v-show
v-show用于根据条件控制元素的显示与隐藏。使用 v-show
指令时,元素始终会被渲染到 DOM 中,只是通过修改 CSS 属性来控制元素的显示与隐藏。这与 v-if
指令不同,v-if
在条件为假时会完全从 DOM 中移除元素。而v-show
控制的元素是一直存在的,只不过没有显示出来。它的使用方法和v-if
是一样的,但v-show
只能用于普通元素,不能用于 <template>
标签或组件。如果需要根据条件动态地渲染组件,应该使用 v-if
指令。
v-bind
v-bind
用于绑定数据到 HTML 元素属性中。当你需要动态地将一个表达式的值绑定到元素的某个属性时,就可以使用 v-bind
或 它的简写语法:
。这样,在 Vue 实例的数据改变时,对应的元素属性也会随之更新。
下面是一个使用 v-bind
的示例,将 Vue 实例中的 message
属性绑定到一个 <p>
元素的 title
属性上:
xml
<template>
<div>
<p v-bind:title="message">Hover your mouse over this text to see the dynamic title.</p>
</div>
</template>
<script>
export default {
data() {
return {
message: 'This is a dynamic title!'
};
}
};
</script>
在上述示例中,v-bind:title
的意思是将 message
属性的值绑定到 <p>
元素的 title
属性上。由于 message
是一个响应式的数据属性,当它的值发生变化时,对应的元素属性也会自动更新。
除了简单的绑定表达式外,v-bind
也可以与其他指令一起使用。例如,可以使用 v-bind:class
来绑定一个动态的 CSS 类名,或使用 v-bind:style
来绑定一个动态的内联样式。
xml
<template>
<div :class="{ active: isActive }" :style="{ color: textColor }">
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
isActive: true,
textColor: 'red',
message: 'Hello, Vue!'
};
}
};
</script>
在上述示例中,:class="{ active: isActive }"
绑定了一个动态的 CSS 类名,如果 isActive
的值为 true
,则 <div>
元素会应用 active
类名。:style="{ color: textColor }"
绑定了一个动态的内联样式,使得 <div>
元素的文字颜色为红色。
v-on
v-on
是用于绑定事件监听器的指令,它可以捕获和响应 HTML 元素上触发的各种事件。它可以简写为@
,这里我们给按钮绑定一个点击事件。
xml
<template>
<div>
<button v-on:click="handleClick">Click Me</button>
</div>
</template>
<script>
export default {
methods: {
handleClick() {
console.log('Button clicked!');
}
}
};
</script>
在上述示例中,我们使用 v-on:click
指令将 handleClick
方法绑定到 <button>
元素的 click
事件上。当用户点击按钮时,会触发 handleClick
方法,并在控制台打印出 'Button clicked!'。
v-model
v-model
可以将表单元素的值和 Vue 实例中的数据进行双向绑定,当表单元素的值发生变化时,对应的数据也会更新,反之亦然。
xml
<template>
<div>
<input v-model="message" type="text">
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
message: ''
};
}
};
</script>
在上述示例中,我们使用 v-model
将 <input>
元素与 Vue 实例中的 message
数据进行双向绑定。当用户输入内容时,message
数据会自动更新,同时页面上的 <p>
元素也会实时显示出用户输入的内容。
本文的知识到这就已经讲完啦,欢迎下次再来一起学习ヾ(◍°∇°◍)ノ゙!!