【Vue.js】v-if、v-show、v-for

目录

v-if、v-show、v-for指令

1、创建模板

2、v-if、v-show效果实现

3、性能选择

4、v-for的使用

总结:


v-if、v-show、v-for指令

1、创建模板

这三个指令是Vue中常见的指令,首先先创建一个最基础的模板:

<!DOCTYPE html>
<html lang='en'>
<head>
	<meta charset="utf-8">
	<title>v-if、v-show、v-for指令</title>
</head>
<body>
	<div id="app"> 
	    <div>hello world</div>
	    <button>按钮</button>
	</div>



	<script type="text/javascript" src="../vue.min.js"></script>
	<script type="text/javascript">
		var app = new Vue({ 
			el :'#app'
		})
	</script>

</body>
</html>

在页面上,定义一个div标签,他显示的内容是hello world,在下面再定义一个button。页面效果如图所示。

2、v-if、v-show效果实现

下面我想做一个事情,当点击按钮时hello world就消失,再点击一次再显示出来。如果是显示,点击按钮,就会消失,如果没显示,点击按钮就会出现。这个时候,我们需要借助v-if或者v-show。

在Vue的实例里面定义一个数据为show,他的默认值为true

var app = new Vue({ 
    el :'#app',
    data: {
        show: true
    }
})

在div标签里面加上一个指令v-if,值为数据项show。只有show为true,hello world存在,show为false时,hello world就消失。

在按钮上绑定一个事件为handleClick,于语法为@click="handleClick"(在这里使用了语法糖,将v-on:click缩写成@click,同样具有语法糖的还有v-bind:class 与:class等等)

<div id="app"> 
	<div v-if="show">hello world</div>
	<button @click="handleClick">按钮</button>
</div>

对应事件的函数定义在methods中,在handleClick函数里面,每次让show的值取当前的反就可以了。

methods: {
	handleClick: function() {
		this.show = !this.show
	}
}

注意观察标签内容的变化。

如果将v-if换成v-show会有同样的效果。

<div id="app"> 
	<div v-show="show">hello world</div>
	<button @click="handleClick">按钮</button>
</div>

但是此时的show=false时,是在对应的标签是加上css属性:display:none;

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>v-if、v-show、v-for指令</title>
</head>
<body>
	<div id="app"> 
		<div v-show="show">hello world</div>
		<button @click="handleClick">按钮</button>
	</div>


	<script type="text/javascript" src="../vue.min.js"></script>
	<script type="text/javascript">
		var app = new Vue({ 
			el : "#app",
			data: {
				show: true
			},
			methods: {
				handleClick: function() {
					this.show = !this.show
				}
			}
		})
	</script>

</body>
</html>

3、性能选择

由此可见,表面上v-if和v-show表现的效果是一模一样的,但是仔细看,还是有差别的,当show的值为false时,用v-if会把对应的标签直接从DOM中移除,而使用show会将改标签隐藏。

选择v-show:如果需要频繁地对div或者某些元素进行展示或者隐藏,用v-show会比较合适,因为在每一次消失后不需要重新创建DOM,它的性能会相对更高一些。

选择v-if:如果显示与消失的频率不是那么大,需要做一次显示或者隐藏,那么选择v-if比较合适。

 

4、v-for的使用

在数据项里定义一个列表,以数组的形式展现。

data: {
	lsit: [1,2,3]
},

在页面上把数组里面的数据循环展示出来,在ul里面展现。

<div id="app">
	<ul>
		<li v-for="item in list">{{item}}</li> <!-- 或者是item of list -->
	</ul>
</div>

item of list的意思是要循环list这个数据项,每一次循环会将对应的循环项的内容放在item的变量中,循环展示list时,将item输出,具体的形式为{{item}}

为提高每一项循环渲染的效率或性能,需要用到:key="",这里需要注意的是,key需要每一项都不相同,因此可以使用每一项的索引作为key值。

<div id="app">
	<ul>
		<li v-for="(item, index) in list" :key="index">{{item}}</li>
	</ul>
</div>

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>v-if、v-show、v-for指令</title>
</head>
<body>
    <div id="app">
	    <ul>
		    <li v-for="(item, index) in list" :key="index">{{item}}</li>
	    </ul>
    </div>


	<script type="text/javascript" src="../vue.min.js"></script>
	<script type="text/javascript">
		var app = new Vue({ 
			el : "#app",
			data: {
				list: [1, 2, 3]
			}
		})
	</script>

</body>
</html>

 

如果这个数据是不需要更改或者频繁变换的话,用index是没有问题的,但是当数据需要频繁变换,比如排序或者增删时,index就会存在问题。

应用:【小程序】wx:for=""下对多维数组的遍历,并根据data-key值改变相应的样式

总结:

v-if:控制DOM的存在与否。

v-show:控制DOM的显示与否。

v-for:控制一组数据,将这组数据进行循环操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值