05-Vue基础-基本指令
基本指令
1. 条件渲染指令
Vue指令中的条件渲染指令有v-if、v-else-if、v-else等,当表达式结果为true时,指令就会进行渲染:
v-if、v-else
<div id="app">
<template v-if="type === 'name'">
<label for="username">用户名:</label>
<input type="text" name="username" placeholder="请输入用户名" key="username">
</template>
<template v-else>
<label for="email">邮箱:</label>
<input type="text" name="email" placeholder="请输入邮箱" key="email">
</template>
<button @click="handleClick">切换输入类型</button>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
type: 'name'
},
methods: {
handleClick() {
this.type = this.type === 'name' ? 'mial' : 'name';
}
}
});
</script>
注意:key属性保证了元素唯一,不会被复用
v-show
v-show的用法基本和v-if一致,只不过v-show是改变元素的display样式属性。
<div id="app">
<p v-show="status === 1">当status为1时显示该行</p>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
status: 2
}
});
</script>
当v-show的表达式结果为false时,元素会隐藏,查看DOM会看到在元素上加载了内联样式:display: none;。
上面的示例最终渲染为:
<p style="display: none">当status为1时显示该行</p>
注意:v-show不能再<template>上使用
v-if与v-show的区别
(1)手段:
v-if是动态的向DOM树内添加或者删除DOM元素;
v-show是通过设置DOM元素的display样式属性控制显隐;
(2)编译过程:
v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;
v-show只是简单的基于css切换;
(3)编译条件:
v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载);
v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;
(4)性能消耗:
v-if有更高的切换消耗;
v-show有更高的初始渲染消耗;
(5)使用场景:
v-if适合条件改动不大的情况;
v-show适合频繁切换。
1.2. 列表渲染指令v-for
1.2.1. 基本用法
当需要将一个数组遍历或枚举循环时,就可以使用v-for指令,示例如下:
<div id="app">
<ul>
<li v-for="book in books">
{{ book.name }}
</li>
</ul>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
books: [
{ name: '《Vue.js 实战》' },
{ name: '《JavaScript 语言精粹》' },
{ name: '《JavaScript 高级程序设计》' }
]
}
});
</script>
v-for表达式支持一个可选参数作为当前项的索引,如下:
<div id="app">
<ul>
<li v-for="(book, index) in books">
{{ index }} - {{ book.name }}
</li>
</ul>
</div>
可以在Vue内置的<template>标签上,将多个元素进行渲染:
<div id="app">
<ul>
<template v-for="book in books">
<li>书名:{{ book.name }}</li>
<li>作者:{{ book.author }}</li>
</template>
</ul>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
books: [
{ name: '《Vue.js 实战》', author: "景逸"},
{ name: '《JavaScript 语言精粹》', author: "景逸" },
{ name: '《JavaScript 高级程序设计》', author: "景逸" }
]
}
});
</script>
除了数组还可以遍历对象,同时有两个可选参数:键名、索引
<div id="app">
<ul>
<li v-for="(value, key, index) in user">
{{ index }} - {{ key }} - {{ value }}
</li>
</ul>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
user: {
name: 'cculin',
age: '26',
style: 'handsome'
}
}
});
</script>
key和index分别就是键名、索引。
1.3. 数组更新
Vue提供了检测数组变化的方法:push,pop,shift,unshift,splice,sort,reverse
例如在books添加一本书:
app.books.push({
name: '《CSS 解密》',
author: 'Lea Verou'
});
当你的才华撑不起自己的野心,那就努力学习吧!
浙公网安备 33010602011771号