Vue.js笔记-条件渲染 列表渲染
v-if
<div id="demo">
<div v-if="abc">{{abc.a}}</div> //该值为true时显示该标签,为false则不显示
</div>
<script>
var vm = new Vue({
el:"#demo",
data:{
abc:{
- a:"1"
}
}
})
</script>
<h1 v-if="ok">Yes</h1>
<h1 v-else>No</h1>
<div v-if=""></div>
<template v-else>
<div v-if=""></div>
<div v-else></div>
</template>
template v-if
如果想切换多个元素,可以把一个<template>元素当作包装元素,并在上面使用v-if,最终的渲染结果不会包含它。<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>
v-show
不同的是有 v-show 的元素会始终渲染并保持在 DOM 中。v-show 是简单的切换元素的 CSS 属性 display。注意 v-show 不支持 <template> 语法。<h1 v-show="ok">Hello!</h1>
v-for
基于一个数组渲染一个列表。语法:item in items(数组元素的别名 in 数据数组)
<ul id="example-1">
<li v-for="item in items">
{{ item.message }}
</li>
</ul>
var example1 = new Vue({
el: "#example-1",
data: {
items: [
{ message: "Foo" },
{ message: "Bar" }
]
}
})
<div v-for="(index, item) in items">
{{ index }} {{ item.message }}
</div>
<div v-for="item of items"></div>
template v-for
渲染一个包含多个元素的块,需要将多个标签都用v-for遍历,那么就需要用template标签。同样,template在实际渲染的时候不会出现,只是起到一个包裹作用。<div id="app">
<ul>
<template v-for="i in items">
<li>Index is {{$index}}</li>
<li>Content is {{i}}</li>
</template>
</ul>
</div>
<script>
var vm = new Vue({
el: "#app",
data: {
items: {
a: "1",
b: "2",
c: "3"
}
}
})
</script>
<ul>
<li>Index is 0</li><li>Content is 1</li>
<li>Index is 1</li><li>Content is 2</li>
<li>Index is 2</li><li>Content is 3</li>
</ul>
数组变动检测
变异方法(修改了原始数组): vue.js包装了被观察数组的变异方法,故它们能出发视图更新,即当利用这些方法变更数组时,被渲染的内容会实时更新,被包装的方法有:- push() 数组末尾添加
- pop() 数组末尾取出
- shift() 数组开头取出
- unshift() 数组开头添加
- splice() 删除并插入
- sort() 排序
- reverse() 数组顺序颠倒
<ul id="demo">
<li v-for = "item in items">
{{item}}
</li>
</ul>
<script>
var vm = new Vue({
el:"#demo",
data:function(){
return {items:[4,2,3].splice(0,2)};
}
})
</script>
例如,假定数据为:
{
items: [
{ _uid: "88f869d", ... },
{ _uid: "7496c10", ... }
]
}
<div v-for="item in items" track-by="_uid">
<!-- content -->
</div>
- 直接用索引设置元素,如 vm.items[0] = {}
- 修改数据的长度,如 vm.items.length = 0
<ul id="demo">
<li v-for = "item in items">
{{item.name}}
</li>
</ul>
<button onclick = "change()">移除</button>
<script>
var test = {name:"d"}
var vm = new Vue({
el:"#demo",
data:{
items:[
{name:"a"},
{name:"b"},
{name:"c"}
]
},
})
vm.items.push(test);
function change(){
vm.items.$remove(test);
}
</script>
对象v-for
作用域内还可以访问另一个特殊变量$key<ul id="repeat-object" class="demo">
<li v-for="value in object">
{{ $key }} : {{ value }}
</li>
</ul>
new Vue({
el: "#repeat-object",
data: {
object: {
FirstName: "John",
LastName: "Doe",
Age: 30
}
}
})
<div v-for="(key, val) in object">
{{ key }} {{ val }}
</div>
值域v-for
v-for 也可以接收一个整数,此时它将重复模板数次。<div>
<span v-for="n in 10">{{ n }} </span>
</div>
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: vue实战总结
- 下一篇:没有了