上一节中 (课程第三部分) 我们学习了如何使用 v-if
和 v-show
进行条件渲染。本节我们将学习如何对数组和对象进行循环,除此之外,我们还将应用之前所学的一些概念。
v-for
v-for
是 Vue 的基本指令之一,一旦你学会如何使用它,你就可以在你的程序中添加更多功能。
简单的来说,v-for
就是一个 for
循环。如果你还不知道什么是 for
循环的话,for
循环其实是一段代码,代码内每一个元素都会被执行一次,而这些元素通常是一个 Array(数组)
或 Object(对象)
。
今天,我们要从头开始,这样我们所做的一切都有一个明确的目的。下面是我们的 index.html
文件的基本结构,你可以将它复制粘贴到编辑器中。
100db36a723c770d327fc0aef2ce13b1 93f0f5c25f18dab9d176bd4f6de5d30e b2386ffb911b14667cb8f0f91ea547a7Vue 1016e916e0f7d1e588d4f442bf645aedb2f 9c3bca370b5104690d9ef395f2c5f8d1 6c04bd5ca3fcae76e30b72ad730ca86d ab509c080ec9f7ec77efedb1cdcd4bed 16b28748ea4df4d9c2150843fecfba68 89fdf195e736e7d681e8695545042be92cacc6d41bbb37262a98f745aa00fbf0 3f1c4e4b6b16bbbd69b2ee476dc4f83a const app = new Vue({ el: '#app', data: { }, methods: { } }); 2cacc6d41bbb37262a98f745aa00fbf0 36cc49f0c466276486e50c850b7e4956 73a6ac4ed44ffec12cee46588e518a5e
让我们先创建一个简单的数组,这样我们可以使用循环输出数组里的内容。我们将在 data
对象中创建一个属性,叫做 games。当然,你也可以取一个自己喜欢的名字???。
data: { games: [ 'Super Mario 64', 'The Legend of Zelda Ocarina of Time', 'Secret of Mana', 'Super Metroid' ] },
现在我们已经设置好了数组,让我们创建一个简单的 ff6d136ddc5fdfeffaf53ff6ee95f185
标签来显示它。
<div id="app"> <ul> <li>Game title here</li> </ul> </div>
看起来很不错! 现在我们要告诉 Vue,我们要通过循环数组在 ff6d136ddc5fdfeffaf53ff6ee95f185
中输出尽可能多的 25edfb22a4f469ecb59f1190150159c6
标签。
在其他语言中,你可能已经习惯了这样来循环输出 25edfb22a4f469ecb59f1190150159c6
标签:
<?php foreach ($game in $games): ?> <li><?php echo $game; ?></li> <?php endforeach; ?>
将需要循环输出的 25edfb22a4f469ecb59f1190150159c6
标签包裹在循环中。
但是在 Vue 中,我们可以将 v-for
指令声明在我们要循环的标签上。首先在你的 25edfb22a4f469ecb59f1190150159c6
标签中做下面这些修改,之后我们再来一步步分析。
<ul> <li v-for="game in games">{{ game }}</li> </ul>
让我们来详细分析一下:
v-for
指令是直接加在25edfb22a4f469ecb59f1190150159c6
标签中,而不是我们前面看到的ff6d136ddc5fdfeffaf53ff6ee95f185
标签。这样写的原因是: “给我们games
数组中的每一个game
都创建一个25edfb22a4f469ecb59f1190150159c6
标签。注意,
games
是我们前面在data
中添加的属性,所以我们要用这个变量名。game
这个变量(单数)是由我们自己定义的,我们可以用item
、game
、title
或者其他我们觉得合适的名称。但是一定要明白,这个 game 是你在循环里面要用的变量。最后,在我们的
25edfb22a4f469ecb59f1190150159c6
标签里面,我们要输出game
变量的内容,所以当我们循环运行的时候,将会依次把games
数组中的字符串输出到25edfb22a4f469ecb59f1190150159c6
标签中。
在浏览器内打开我们的 index.html
文件,你应该会看到 games
数组内的内容被输出到屏幕上。
提升点难度
到目前为止,还算不错吧? v-for
实际上是一个非常简单的概念,但是这个例子太无聊了。让我们把事情变得更复杂有趣一点,在我们的数组中包含一些对象,并配合着 v-if
使用,怎么样?
首先,我们用一些更有趣的数据来更新我们的 games
属性。
data: { games: [ { name: 'Super Mario 64', console: 'Nintendo 64', rating: 4 }, { name: 'The Legend of Zelda Ocarina of Time', console: 'Nintendo 64', rating: 5 }, { name: 'Secret of Mana', console: 'Super Nintendo', rating: 4 }, { name: 'Fallout 76', console: 'Multiple', rating: 1 }, { name: 'Super Metroid', console: 'Super Nintendo', rating: 6 } ] },
如果你现在运行我们的程序,它不会出错,但它只会以字符串的格式输出 games
里的对象,这不太美观。事实上,我们要彻底删掉我们的 ff6d136ddc5fdfeffaf53ff6ee95f185
标签,用 dc6dce4a544fdca2df29d5ac0ea9906b
标签来输出我们的信息。(别担心,用了 div 还是会很难看?)
将整个 0668f9b9672fb8bee085b6d77157e8a9
替换成如下内容:
<div id="app"> <div v-for="game in games"> <h1>{{ game.name }} - <small>{{ game.console }}</small></h1> <span v-for="star in game.rating">❤️</span> <div v-if="game.rating > 5">Wow, this game must be <b>REALLY</b> good</div> </div> </div>
?. 看到上面一大堆是不是很害怕?不用担心,你只需要了解的是什么,让我们详细分析一下:
div v-for="game in games"
还是老样子,我们要循环games
数组,并将games
数组内的每个对象存储在game
变量中。看看
4a249f0d628e2318394fd9b75b4636b1
标签. 因为game
是一个对象,而这个对象里又有自己的 name、console 和rating 属性。在4a249f0d628e2318394fd9b75b4636b1
里面,我们要输出game
内的game.name
和game.console
。正如你现在所看到的那样,v-for
并不像我们之前只输出25edfb22a4f469ecb59f1190150159c6
标签,实际上你可以根据你的需要输出不同的 HTML 标签。嵌套的
v-for
。在span
标签里面,我们有一个嵌套的v-for
循环(这完全是可以的),只是有点不同,在这里我们没有循环数组或对象。而是循环了一个数值(在本例中是game.rating
,循环将根据game.rating
的值开始计数,然后输出对应数量的❤️。很简单吧?)最后是
v-if
。我们要在循环中输出一个dc6dce4a544fdca2df29d5ac0ea9906b
标签,只有当前game.rating
的值大于 5 时,才会输出一个dc6dce4a544fdca2df29d5ac0ea9906b
标签。
来吧,在浏览器中继续运行我们的 index.html
文件。
每次循环时可不可以不使用 DIV ?
如果你发现写了一大堆 dc6dce4a544fdca2df29d5ac0ea9906b
标签只是为了用 v-for
循环,那么可以使用 d477f9ce7bf77f53fbcf36bec1b69b7a 028402f0d1e2c7f0a5739e0164ec6833
这个特殊的 HTML 标签帮助你解决这个问题。
现在将带有 v-for
指令的 dc6dce4a544fdca2df29d5ac0ea9906b
标签改成 d477f9ce7bf77f53fbcf36bec1b69b7a
标签,然后打开你的开发者控制台,你会发现 4a249f0d628e2318394fd9b75b4636b1
和 45a2772a6b6107b401db3c9b82c049c2
标签没有被任何东西包裹。
d477f9ce7bf77f53fbcf36bec1b69b7a
很特别,因为 Vue 会把它当作一个只用来封装的标签,当我们执行的时候,它不会被渲染到 HTML 中,所以你可以安全地用它来封装一堆其他元素,而不影响你整体的 HTML 结构。
:key 属性
最后一件事::key
属性。我特意留到了最后来讲解。
当你用 v-for
循环时,Vue 不知道如何追踪每个元素,因为它不能将对象区别开来。这意味着 Vue 将重新渲染循环创建的整个部分。在我们的例子中,v-for
只是一个很小的部分,性能损失很小,但这些你应该牢记住。
现在,我们该如何使用它呢?
:key
接收字符串或数字来 “命名” 或 “追踪” 这个元素,所以我们需要给它一个唯一的标识符。对于我们的 games
来说,很简单,我们可以这样做:
<div v-for="game in games" :key="game.name">
我很确定,我们不会在这个列表中出现两次相同的 game
对象,所以这是相当安全的。如果你有来自数据库的数据,一个唯一的 id 在这里使用也很好。
如果你对 :key
的原理很好奇,你可以看看文档 Key的文档
既然你已经了解了这么多,我就再强调下文档的重要性。 Vue 的文档非常出色,文档团队在保持更新和清晰性方面做了很多努力并且通过代码示例把每个部分都解释的非常清楚。
最终代码
以防万一,这是最终的代码:
Vue 101 <div v-for="game in games" :key="game.name">{{ game.name }} - {{ game.console }}
❤️Wow, this game must be REALLY good
小测验
请在 45a2772a6b6107b401db3c9b82c049c2
标签中添加一个 @click
事件,使它每次点击就会增加一个❤️。
提示: 你需要将正在循环的 game
对象传递给点击方法。
原文地址:https://dev.to/marinamosti/hands-on-vuejs-for-beginners-part-4-324l
译文地址:https://www.php.cn/link/5a13fe4ac11f3e35f4b9f0a99cf504c0
以上是Vue.js实战入门:如何对数组和对象进行循环的详细内容。更多信息请关注PHP中文网其他相关文章!

vue中props可以传递函数;vue中可以将字符串、数组、数字和对象作为props传递,props主要用于组件的传值,目的为了接收外面传过来的数据,语法为“export default {methods: {myFunction() {// ...}}};”。

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver Mac版
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),