深入理解vue.js2.0指令v-for使用及索引获取
深入理解vue.js2.0指令v-for使用及索引获取 v-for 基于源数据多次渲染元素或模板块。此指令之值,必须使用特定语法 alias in expression ,为当前遍历的元素提供别名: {{ item.text }}
·
深入理解vue.js2.0指令v-for使用及索引获取
v-for
基于源数据多次渲染元素或模板块。此指令之值,必须使用特定语法
alias in expression
,为当前遍历的元素提供别名:
<div v-for="item in items"> {{ item.text }} </div>
另外也可以为数组索引指定别名(或者用于对象的键):
<div v-for="(item, index) in items"></div> <div v-for="(val, key) in object"></div> <div v-for="(val, key, index) in object"></div>
v-for
默认行为试着不改变整体,而是替换元素。迫使其重新排序的元素,您需要提供一个
key
的特殊属性:
<div v-for="item in items" :key="item.id"> {{ item.text }} </div>
索引
在v-for
块中,我们拥有对父作用域属性的完全访问权限。v-for
还支持一个可选的第二个参数为当前项的索引。<ul id="example-2"> <li v-for="(item, index) in items"> {{ parentMessage }} - {{ index }} - {{ item.message }} </li> </ul>
结果:var example2 = new Vue({ el: '#example-2', data: { parentMessage: 'Parent', items: [ { message: 'Foo' }, { message: 'Bar' } ] } })
.Parent - 0 -Foo.Parent - 1 -Bar注意:在2.0版是1~10中,$index已废除,索引 (item,index)。
你也可以用 of
替代 in
作为分隔符,因为它是最接近 JavaScript 迭代器的语法:
<div v-for="item of items"></div>
Template v-for
如同v-if
模板,你也可以用带有v-for
的<template>
标签来渲染多个元素块。例如:<ul> <template v-for="item in items"> <li>{{ item.msg }}</li> <li class="divider"></li> </template> </ul>
对象迭代 v-for
你也可以用v-for
通过一个对象的属性来迭代。
<ul id="repeat-object" class="demo"> <li v-for="value in object"> {{ value }} </li> </ul>
结果:new Vue({ el: '#repeat-object', data: { object: { FirstName: 'John', LastName: 'Doe', Age: 30 } } })
.John.Doe.30
你也可以提供第二个的参数为键名:第三个参数为索引:<div v-for="(value, key) in object"> {{ key }} : {{ value }} </div>
<div v-for="(value, key, index) in object"> {{ index }}. {{ key }} : {{ value }} </div>
整数迭代 v-for
结果:<div> <span v-for="n in 10">{{ n }}</span> </div>
1 2 3 4 5 6 7 8 9 10
注意:在1.0版,0~9 在2.0版是1~10。
组件 和 v-for
在自定义组件里,你可以像任何普通元素一样用v-for
。
然而他不能自动传递数据到组件里,因为组件有自己独立的作用域。为了传递迭代数据到组件里,我们要用<my-component v-for="item in items"></my-component>
props
:<my-component v-for="(item, index) in items" v-bind:item="item" v-bind:index="index"> </my-component>
不自动注入item
到组件里的原因是,因为这使得组件会紧密耦合到v-for
如何运作。在一些情况下,明确数据的来源可以使组件可重用。
下面是一个简单的 todo list 完整的例子:
<div id="todo-list-example"> <input v-model="newTodoText" v-on:keyup.enter="addNewTodo" placeholder="Add a todo" > <ul> <li is="todo-item" v-for="(todo, index) in todos" v-bind:title="todo" v-on:remove="todos.splice(index, 1)" ></li> </ul> </div>
结果:Vue.component('todo-item', { template: '\ <li>\ {{ title }}\ <button v-on:click="$emit(\'remove\')">X</button>\ </li>\ ', props: ['title'] }) new Vue({ el: '#todo-list-example', data: { newTodoText: '', todos: [ 'Do the dishes', 'Take out the trash', 'Mow the lawn' ] }, methods: { addNewTodo: function () { this.todos.push(this.newTodoText) this.newTodoText = '' } } })
想知道,自己敲下,不就知道啦
更多推荐
已为社区贡献37条内容
所有评论(0)