Vue2.0 【第一季】 第3节 v-for指令:解决模板循环问题

第三节 v-for 指令

v-for指令是循环渲染一组data中的数组,v-for 指令需要以 item in items 形式的特殊语法,items 是源数据数组并且item是数组元素迭代的别名。

一、基本用法:

模板写法

<li v-for="item in items">
{{item}}
</li>

js写法:

var app = new Vue({
el:'#app',
data:{
items:[20,23,18,65,32,19,54,56,41]
}
})

v-for.html完整写法:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="../assets/js/vue.js"></script>
<title>V-for 案例</title>
</head>
<body>
<h1>v-for指令用法</h1>
<hr>
<div id="app">
<ul>
<li v-for="item in items">
{{item}}
</li>
</ul>
</div> <script type="text/javascript">
var app=new Vue({
el:'#app',
data:{
items:[20,23,18,65,32,19,54,56,41]
}
})
</script>
</body>
</html>

这是一个最基础的循环,先在js里定义了items数组,然后在模板中用v-for循环出来,需要注意的是,你需要哪个html标签循环,v-for就写在哪个上边。

浏览器效果:

二、排序

我们已经顺利的输出了我们定义的数组,但是我需要在输出之前给数组排个序,那我们就用到了Vue的computed:属性。

computed:{
sortItems:function(){
return this.items.sort();
}
}

我们在computed里新声明了一个对象sortItems,如果不重新声明会污染原来的数据源,这是Vue不允许的,所以你要重新声明一个对象。

相应的把:

<li v-for="item in items">
{{item}}
</li>

改成:

<li v-for="item in sortItems">
{{item}}
</li>

如果一切顺利的话,你已经看到了结果:

但是这个小程序还是有个小Bug的,现在我把数组修改成这样:

items:[20,23,18,65,32,19,5,56,41]

我们把其中的54修改成了5,我们再看一下结果:

我们可以自己编写一个方法sortNumber,然后传给我们的sort函数解决这个Bug:

function sortNumber(a,b){
return a-b
}

如果不知道方法的位置,看一下完整的代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="../assets/js/vue.js"></script>
<title>V-for 案例</title>
</head>
<body>
<h1>v-for指令用法</h1>
<hr>
<div id="app">
<ul>
<li v-for="item in sortItems">
{{item}}
</li>
</ul>
</div> <script type="text/javascript">
var app=new Vue({
el:'#app',
data:{
items:[20,23,18,65,32,19,5,56,41]
},
computed:{
sortItems:function(){
return this.items.sort(sortNumber);
}
}
});
function sortNumber(a,b){
return a-b
}
</script>
</body>
</html>

再次看一下浏览器效果:



(这是重点,工作中常用。)

三、对象循环输出

我们上边循环的都是数组,那我们来看一个对象类型的循环是如何输出的。

我们先定义个数组,数组里边是对象数据

students:[
{name:'Da0sy',age:21},
{name:'Daisy',age:19},
{name:'Coisini',age:20},
{name:'angelrain',age:18}
]

在模板中输出:

<ul>
<li v-for="student in sortStudents">
{{student.name}} - {{student.age}}
</li>
</ul>

加入索引序号:

//数组对象方法排序:
function sortByKey(array,key){
return array.sort(function(a,b){
var x=a[key];
var y=b[key];
return ((x<y)?-1:((x>y)?1:0));
});
}

有了数组的排序方法,在computed中进行调用排序

sortStudents:function(){
return sortByKey(this.students,'age');
}

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>v-for 实例</title>
<script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
<h1>v-for 实例</h1>
<hr>
<div id="app">
<ul>
<li v-for="item in sortItems">
{{item}}
</li>
</ul>
<hr>
<ul>
<li v-for="student in sortStudents">
{{student.name}}-{{student.age}}
</li>
</ul>
</div> <script type="text/javascript">
var app = new Vue({
el:'#app',
data:{
items:[53,23,7,14,54,36,28],
students:[
{name:'Da0sy',age:21},
{name:'Coisini',age:20},
{name:'Daisy',age:19},
{name:'angelrain',age:18}
]
},
computed:{
sortItems:function(){
return this.items.sort(sortNumber);
},
sortStudents:function(){
return sortByKey(this.students,'age');
}
}
});
function sortNumber(a,b){
return a-b;
}
//数组对象方法排序:
function sortByKey(array,key){
return array.sort(function(a,b){
var x=a[key];
var y=b[key];
return ((x<y)?-1:((x>y)?1:0));
});
}
</script>
</body>
</html>

看一下浏览器效果:

最新文章

  1. Centos7 关闭防火墙(转)
  2. jsp统测
  3. [BS-29] 给UIView添加背景图片
  4. spring mvc4.1.6 + spring4.1.6 + hibernate4.3.11 + mysql5.5.25 开发环境搭建及相关说明
  5. 越狱Season 1-Episode 1: the pilot
  6. HttpContext及HttpContext.current
  7. A Tour of Go Web servers
  8. SQL Server索引进阶:第十二级,创建,修改,删除
  9. BZOJ 1004: [HNOI2008]Cards(群论)
  10. javaWeb学习总结(7)-会话之session技术
  11. 【转】HTTP Header 详解
  12. linux环境下安装redis扩展
  13. C语言缓冲区(缓存)详解
  14. vue+vuecli+webapck2实现多页面应用
  15. 【mysql-server】遇到的坑
  16. Jenkins结合.net平台工具之Msbuild
  17. linux 新建用户、用户组 以及为新用户分配权限(转)
  18. Vue子组件调用父组件的方法
  19. Kattis之旅——Inverse Factorial
  20. hdu4990 Reading comprehension 矩阵快速幂

热门文章

  1. 01_JDK的下载-安装-配置
  2. iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码
  3. 网络TCP/IP分层、子网掩码等基本概念
  4. whatsoever|
  5. 接口测试-chap3-https请求证书问题
  6. 推荐使用concurrent包中的Atomic类
  7. Python---9高级特性
  8. ES:PB级别的大索引如何设计
  9. ubuntu采用apt-get安装pure-ftpd
  10. springboot java web开发工程师效率