Vue 的内置指令(一)

基本指令

   v-cloak:不要表达式,会在Vue实例结束编译时从绑定的HTML元素上移除,经常和display:none配合使用

实例一、 

<style type="text/css">
		[v-cloak]{
			display: none;
		}
	</style>
</head>
<body>
	<div id="app" v-cloak>
		{{message}}		
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				message:'这是一段文本'
			}
		})
	</script>

v-clock是解决初始化慢导致页面闪动的最佳实践

二、

v-once:定义它的元素和组件只渲染一次,包括元素或者组件的所有子节点。首次渲染后,不再随数据的变化重新编译,将被视为静态内容。

<div id="app">
		<span v-once>{{message}}</span>
		<div v-once>
			<span>{{message}}</span>
		</div>		
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				message:'这是一段文本'
			}
		})
	</script>

业务中使用很少,当进一步优化性能时,可能会用到。

三、vue提供的if判断

<div id="app">
		<p v-if="status === 1 ">当status为1显示该行</p>
		<p v-else-if="status ===2 ">当status为2时显示该行</p>
		<p v-else>否则显示改行</p>
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				status:1
			}
		})
	</script>

实例四、

<div id="app">
		<template v-if="type === 'name'">
			<label>用户:</label>
			<input placeholder="输入用户名"/>
		</template>
		<template v-else>
			<label>邮箱:</label>
			<input placeholder="输入邮箱"/>
		</template>
		<button @click="handleToggleClick">切换输入类型</button>
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				type:"name"
			},
			methods:{
				handleToggleClick:function(){
					this.type = this.type === 'name'?'mail':'name';
					console.log(this.type);
				}
			}
		})
	</script>

@click 是 v-on的缩写,绑定一个事件。

本例为点击更换input框。但是复用了input框。也就是在用户上输入了什么,更换的时候,也会显示什么。如下图



如果不想复用,可以使用Vue提供的key属性


这样就不会复用input,因为使用key指向了两个键位。

五、v-show:v-show的用法和v-if基本一致,v-show改变元素的css属性display。当v-show表达式为false的时候,元素会隐藏

实例:

<div id="app">
		<p v-show="status === 1">当status为1的显示该行</p>
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				type:2
			}
		})
	</script>

渲染结果:

<div id="app"><p style="display: none;">当status为1的显示该行</p></div>

关于v-if和v-show的选择

功能类似,不过v-if是真正的条件渲染,它能根据表达式适当的创建和销毁。v-show 只是简单的CSS属性切换。

v-if更适合条件不经常改变的场景,因为它的切换开销比较大,而v-show适用于频繁切换条件。

六、列表渲染指令 v-for

<div id="app">
		<ul>
			<li v-for="book in books">{{book.name}}</li>
		</ul>
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				books:[
					{name:'《vue.js实践》'},
					{name:'《javascript语言精粹》'},
					{name:'《javascript高级程序设计》'},
				]
			}
		})
	</script>

in可以用of代替。

v-for的表达支持一个可选参数作为当前项的索引,index

<div id="app">
		<ul>
			<li v-for="(book,index) in books">{{index}}-{{book.name}}</li>
		</ul>
	</div>

上例books 是数组,也可以遍历对象如:

<div id="app">
		<span v-for="value in user">{{value}}</span>
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				user:{
					name:'Aresn',
					gender:'男',
					age:26
				}
			}
		})
	</script>

遍历对象的时候,有两个参数可以选择如:

<div id="app">
		<ul>
			<li v-for="(value,key,index) in user">{{index}}-{{key}}-{{value}}</li>
		</ul>
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				user:{
					name:'Aresn',
					gender:'男',
					age:26
				}
			}
		})
	</script>
第一个为值,第二个为key,第三个为下标从0开始
<div id="app">
		<ul>
			<template v-for="book in books">
				<li >{{book.name}}</li>
				<li >{{book.author}}</li>
			</template>
		</ul>
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				books:[
						{
							name:'《vue.js实践》',
							author:'大神'
						},
						{
							name:'《javascript语言精粹》',
							author:'大神'
						},
						{
							name:'《javascript高级程序设计》',
							author:'大神'
						}	
				]
			}
		});
		app.books = app.books.filter(function(item) {
				return item.name.match(/javascript/);
		});
	</script>

当Vue检测到数组变化的时候,并不是直接重新渲染整个列表,相同元素不会重新渲染,使用新数组代替旧数组,不用担心性能问题。

这也可使用数组的副本来过过滤或者排序。使用计算属性。上例可改编成:

<div id="app">
		<ul>
			<template v-for="book in filterBooks">
				<li >{{book.name}}</li>
				<li >{{book.author}}</li>
			</template>
		</ul>
	</div>
	<script type="text/javascript">
		var app = new Vue({
			el:'#app',
			data:{
				books:[
						{
							name:'《vue.js实践》',
							author:'大神'
						},
						{
							name:'《javascript语言精粹》',
							author:'大神'
						},
						{
							name:'《javascript高级程序设计》',
							author:'大神'
						}	
				]
			},
			computed:{
				filterBooks:function(){
					return this.books.filter(function(book){
						return book.name.match(/javascript/);
					});
				}
			}
		});
	</script>






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值