[基础]v-for列表循环详细讲解-2

  • v-for循环数字
  • v-for中如何使用判断
  • template 标签的使用

v-for循环数字

v-for是可以用来循环数字的,比如你要循环1-99的数字,可以直接写成下面的样子。

<span v-for="count in 99">{{count}},</span>

这样就可以快速的循环出1-99的值在页面上。可以在浏览器中看一下这个效果。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://unpkg.com/vue@next" ></script>
</head>
<body><div id="app"></div>
</body>
<script>
const app=Vue.createApp({ data(){return{}},methods:{},template:`<span v-for="count in 12">{{count}}<br /></span>`
})
const vm=app.mount("#app")
</script>
</html>

v-for中如何使用判断

你看一下,上篇文章写的关于数组循环的小例子,现在的新需求有些变化,由于公司不想招初级前端工程师了,我们想刨除出去,只显示中级和高级。这时候你很可能把代码写成这个样子。

<ul><li v-for="(item,index) in listArray":key="index+item"v-if="item != '初级'">[{{index}}]{{item}}</li>
</ul>

在浏览器中进行预览,你会发现初级的循环项,并没有消失。

这是为什么呢?
因为v-for循环的优先级要高于v-if判断的优先级,所以判断失效。

正确的写法应该是在<li>外层独立出一个标签,在<li>上做循环。
比如写成下面的代码。

template:`<ul><div v-for="(item,index) in listArray" :key="index+item"><li v-if="item != '初级'">[{{index}}]{{item}}</li></div></ul>`

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://unpkg.com/vue@next" ></script>
</head>
<body><div id="app"></div>
</body>
<script>
const app=Vue.createApp({ data(){return{listArray:['初级','中级','高级']}},methods:{},template:`<ul><div v-for="(item,index) in listArray" :key="index+item"><li v-if="item != '初级'">[{{index}}]{{item}}</li></div></ul>`
})
const vm=app.mount("#app")
</script>
</html>

这时候到浏览器中预览,初级项如愿以偿的消失了。

template 标签的使用

上面的结果完美吗?
当你打开浏览器的控制台,看Elements选项卡时,你会发现DOM结构是有问题的,明明循环出两项,却有3个<div>,而且这种外层套用<div>里边使用<li>的形式,不符合HTML语法的基本结构。


为了解决这个问题,Vue给我们提供了<template>模版标签,也就是一个空的占位符,目的就是解决模板中为完成业务逻辑,而使用的无用html标签的现象。

现在可以把上面的代码写成这样。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://unpkg.com/vue@next" ></script>
</head>
<body><div id="app"></div>
</body>
<script>
const app=Vue.createApp({ data(){return{listArray:['初级','中级','高级']}},methods:{},template:`<ul><template v-for="(item,index) in listArray" :key="index+item"><li v-if="item != '初级'">[{{index}}]{{item}}</li></template></ul>`
})
const vm=app.mount("#app")
</script>
</html>


这时候再到浏览器看一下结果,这样就符合我们的期待的样子了。

<ul><!--v-if--><li>...</li><li>...</li>
</ul>

到这也基本讲完了vue3中对于列表循环的基本操作和一些小坑,希望对大家有帮助。

为了方便大家学习,附上本文所有代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://unpkg.com/vue@next"></script>
</head><body><div id="app"></div>
</body>
<script>
const app = Vue.createApp({data() { return { listArray: ['初级', '中级', '高级'],listObject:{ DogOne:'黑背', DogTwo:'泰迪', DogThree:'金毛' }} },methods:{handleChangeBtnClick(){this.listArray.push('willem')},},template: `<ul><template v-for="(item,index) in listArray" :key="index+item"><li v-if="item != '初级'">[{{index}}]{{item}}</li></template></ul><button @click="handleChangeBtnClick">点我改变</button><ul><li v-for="(value,key,index) in listObject" :key="key">[{{index}}]{{value}}-{{key}}</li></ul><span v-for="count in 99">{{count}},</span>`
})
const vm = app.mount("#app")
</script>
</html>

18 v-for中使用v-if结合template标签的使用相关推荐

  1. 关于template标签用法总结(含vue中的用法总结)

    文章目录 一.html5中的template标签 二.template标签操作的属性和方法 三.vue中的template 1.template标签在vue实例绑定的元素内部 2.vue实例中的tem ...

  2. oracle设置缓存大小设置多少,【数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※】...

    [数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※]     Oracle 9i引入了一个新的途径来预测数据缓冲cache中附加数据缓存的所带来的好处的多少.V$DB_CACHE_A ...

  3. X$BH及V$BH中各字段意义

    X$BH    SYS用户可查询 buffer header数据,可以从数据库的数据字典表中查询得到,这张字典表就是x$bh,其中的bh就是指buffer headers,每个buffer在x$bh中 ...

  4. 关于v$process与v$session中process的理解

    v$session有个process字段,V$PROCESS有个SPID字段,这两个字段是不是一个意思呢?是不是都代表会话的操作系统进程呢? 官方文档上的解释: SPID      VARCHAR2( ...

  5. 将编号为0和1的两个栈存放于一个数组空间V[m]中。

    目录 1.题目描述 2.算法实现 1.题目描述 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端.当第0号栈的栈顶指针top[0]等于-1时该栈为空:当第1号栈的栈顶指针to ...

  6. oracle 查看动态性能视图,Oracle 中的V$ 动态性能视图

    v$database:数据库的信息,如数据库名,创建时间等. v$instance 实例信息,如实例名,启动时间. v$parameter 参数信息,select * from v$parameter ...

  7. 软件开发中的V字模型与W模型(使开发与侧试分离)

    ■前言 关于 W字模型,以前好像听过, 但是印象不深刻,几天有听别人说了一遍, 采用W字模型的主要目的是,测试与开发分离. ■瀑布开发中的V字模型 与 W模型 --- ■吐槽 ⇒ W字模型 很少有项目 ...

  8. oracle v rman status,RMAN 中V$ARCHIVED_LOG 中STATUS 为X 的文件处理

    记录一下[@more@] 今天发现RMAN 中V$ARCHIVED_LOG 中STATUS 为"X" 的文件,想起是因为手动删掉错几个日志造成的,通过如下的方法把RMAN 中的记录 ...

  9. 关于v$process与v$session中process的理解(转载)

    http://www.itpub.net/thread-1077321-1-1.html(出处) 关于v$process与v$session中process的理解 说明 v$session有个proc ...

  10. matlab中 u v =eig功能,Matlab eig(.)最大支持多大的方阵?

    Matlab eig(.)最大支持多大的方阵? 关注:243  答案:2  手机版 解决时间 2021-02-11 21:23 提问者彼岸独舞 2021-02-11 03:08 Matlab eig( ...

最新文章

  1. 日常遇到的一些问题或知识的笔记(一)
  2. php企业网站源码安装教程,PHPSCUP企业建站系统v1.4 安装图文教程
  3. 经典!MATLAB线性等分linspace()函数,精确等分点数
  4. ocbase 数据库 蚂蚁_iOS - OC SQLite 数据库存储
  5. 【Android Developers Training】 6. 配置Action Bar
  6. SmartPart事件
  7. 【渝粤教育】国家开放大学2019年春季 2508学前儿童语言教育 参考试题
  8. android 底部菜单
  9. Linux基础学习二:计算机组成以及Linux简单配置
  10. React Native移动框架功能研究
  11. 利用Apperance协议定义View的全局外观
  12. KMP模式匹配算法程序(Python,C++,C)
  13. R语言实战:个人贷款违约预测模型
  14. 这是阿里人手机里,这一年最舍不得删的照片
  15. html设置默认选中状态,html select 标签设置默认选中
  16. 阿里程序员常用的15款开发者工具
  17. nexus nexus3_如何在Nexus 7的主屏幕上启用横向方向
  18. [高项]假设情景分析VS假设分析
  19. qt+mysql开发提示driver not loaded driver not loaded
  20. python下载安装图文教程-Pycharm下载安装图文教程

热门文章

  1. 基于DeeplabV3+的语义分割实现
  2. Android 沉浸式状态栏必须要知道的那些事
  3. [附源码]SSM计算机毕业设计校园摄影爱好者交流网站JAVA
  4. python 生成手机号,并且验证手机号是否存在
  5. jmeter-1-apache ant-集成测试
  6. VMware安装Kali虚拟机教程
  7. jquery鼠标悬停事件hover()
  8. 以 OTA 为例,看爬虫和反爬虫大战现状
  9. C# 中常用的文件流(FileStream、StreamReader/Writer、MemoryStream)
  10. html边框复合属性,详解CSS的border边框属性及其在CSS3中的新特性