我们写的页面需要记录图书的列表
1 // 我们用普通方法写 2 3 <ol> 4 <li>《撒哈拉的故事》</li> 5 <li>《活着》</li> 6 <li>《围城》</li> 7 <li>《哈利波特》</li> 8 </ol>
浏览器显示:
我们在用vue提供的列表渲染来完成这个例子
1 <ol id="books-list"> 2 <li v-for="site in sites"> 3 {{site.book}} 4 </li> 5 </ol> 6 <script> 7 new Vue({ 8 el:"#books-list", 9 data:{ 10 sites:[ 11 {book:"《撒哈拉的故事》"}, 12 {book:"《活着》"}, 13 {book:"《围城》"}, 14 {book:"《哈利波特》"} 16 ] 18 } 19 }) 20 </script>
浏览器显示:
在 v-for
块中,我们拥有对父作用域属性的完全访问权限。v-for
还支持一个可选的第二个参数为当前项的索引。
我们拥有对父作用域属性的完全访问权限?首先来解释一下这句话:
1 <ol id="books-list"> 2 <li v-for="(site, index) in sites"> 3 // 在这里就是vue的子作用域在这里我们可以取到父作用域的 site以及index 4 {{site.book}} 5 </li> 6 </ol> 7 <script> 8 new Vue({ 9 el:"#books-list", 10 data:{ 11 sites:[ 12 {book:"《撒哈拉的故事》"}, 13 {book:"《活着》"}, 14 {book:"《围城》"}, 15 {book:"《哈利波特》"} 16 17 ] 18 19 } 20 }) 21 </script>
(首先上述内容有可能有误,欢迎指正)
而index就是 第二个参数---索引值
<ul id="books-list"> <li v-for="(site, index) in sites"> {{index}}-{{site.book}} </li> </ul> <script> new Vue({ el:"#books-list", data:{ sites:[ {book:"《撒哈拉的故事》"}, {book:"《活着》"}, {book:"《围城》"}, {book:"《哈利波特》"} ] } }) </script>
(为了更容易看出index的功能我把ol换成了 ul标签)
浏览器显示:
当然我们还可以用of代替in 因为这是最接近JavaScript迭代器的语法
<li v-for="(site, index) of sites">
一个对象的object
1 <ul id="v-for-object"> 2 <li v-for="value in object"> 3 {{author}}-{{value}} 4 </li> 5 </ul> 6 <script> 7 new Vue({ 8 el:"#v-for-object", 9 data:{ 10 author:"作者", 11 object:{ 12 "三毛":"《撒哈拉的故事》", 13 "余华":"《活着》", 14 "钱钟书":"《围城》", 15 "J·K·罗琳":"《哈利波特》" 16 } 17 } 18 })
显示如下:
要把作者的名字也打印出来,需要添加第二个参数 key
<li v-for="(value, key) in object">
{{author}}-{{key}}-{{value}}
</li>
显示如下

但第三个参数是什么呢?没错!就是索引,最终的页面
