基本指令
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>