上一節中(課程第三部分) 我們學習如何使用v-if
和v -show
進行條件渲染。本節我們將學習如何對陣列和物件進行循環,除此之外,我們還將應用先前所學的一些概念。
v-for
v-for
是Vue 的基本指令之一,一旦你學會如何使用它,你就可以在你的程式中加入更多功能。
簡單的來說,v-for
就是一個 for
迴圈。如果你還不知道什麼是for
迴圈的話,for
迴圈其實是一段程式碼,程式碼內每一個元素都會被執行一次,而這些元素通常是一個Array (數組)
或Object(物件)
。
今天,我們要從頭開始,這樣我們所做的一切都有一個明確的目的。下面是我們的 index.html
檔案的基本結構,你可以將它複製並貼上到編輯器中。
<title>Vue 101</title> <div> </div> <script></script> <script> const app = new Vue({ el: '#app', data: { }, methods: { } }); </script>
讓我們先建立一個簡單的數組,這樣我們就可以使用循環輸出數組裡的內容。我們將在 data
物件中建立一個屬性,叫做 games。當然,你也可以取一個自己喜歡的名字???。
data: { games: [ 'Super Mario 64', 'The Legend of Zelda Ocarina of Time', 'Secret of Mana', 'Super Metroid' ] },
現在我們已經設定好了數組,讓我們建立一個簡單的 <ul></ul>
標籤來顯示它。
<div id="app"> <ul> <li>Game title here</li> </ul> </div>
看起來很不錯! 現在我們要告訴Vue,我們要透過循環數組在<ul></ul>
中輸出盡可能多的<li>
標籤。
在其他語言中,你可能已經習慣了這樣來循環輸出<li>
標籤:
<?php foreach ($game in $games): ?> <li><?php echo $game; ?></li> <?php endforeach; ?>
將需要循環輸出的<li> 標籤包裹在迴圈中。
但是在 Vue 中,我們可以將 v-for
指令宣告在我們要循環的標籤上。首先在你的 <li>
標籤中做下面這些修改,之後我們再來一步一步分析。
<ul> <li v-for="game in games">{{ game }}</li> </ul>
讓我們來詳細分析一下:
-
<li>
v-for
指令是直接加在<li>
#標籤中,而不是我們前面看到的<ul></ul>
標籤。這樣寫的原因是:「給我們games
數組中的每一個game
都創建一個<li>
標籤。
是我們前面在data
中加入的屬性,所以我們要用這個變數名稱。
##game 這個變數(單數)是由我們自己定義的,我們可以用item
、game、
title 或其他我們覺得合適的名稱。但是一定要明白,這個
game
標籤裡面,我們要輸出
game 變數的內容,所以當我們循環運行的時候,將會依序把
games 陣列中的字串輸出到
< ;li> 標籤中。index.html
文件,你應該會看到- games<li> 陣列內的內容被輸出到螢幕上。
提升點難度
到目前為止,還不錯吧?
v-for實際上是一個非常簡單的概念,但是這個例子太無聊了。讓我們把事情變得更複雜有趣一點,在我們的數組中包含一些對象,並配合著
v-if
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### 裡的對象,這不太美觀。事實上,我們要徹底刪掉我們的###
- ### 標籤,用###
看看 <h1></h1>
标签. 因为 game
是一个对象,而这个对象里又有自己的 name、console 和rating 属性。在 <h1></h1>
里面,我们要输出 game
内的 game.name
和 game.console
。正如你现在所看到的那样,v-for
并不像我们之前只输出 <li>
标签,实际上你可以根据你的需要输出不同的 HTML 标签。
嵌套的 v-for
。在 span
标签里面,我们有一个嵌套的 v-for
循环(这完全是可以的),只是有点不同,在这里我们没有循环数组或对象。而是循环了一个数值(在本例中是 game.rating
,循环将根据 game.rating
的值开始计数,然后输出对应数量的❤️。很简单吧?)
最后是 v-if
。我们要在循环中输出一个 <div> 标签,只有当前 <code>game.rating
的值大于 5 时,才会输出一个<div>标签。<p>来吧,在浏览器中继续运行我们的 <code>index.html
文件。
每次循环时可不可以不使用 DIV ?
如果你发现写了一大堆 <div> 标签只是为了用 <code>v-for
循环,那么可以使用 <template> template></template>
这个特殊的 HTML 标签帮助你解决这个问题。
现在将带有 v-for
指令的 <div> 标签改成 <code><template></template>
标签,然后打开你的开发者控制台,你会发现 <h1></h1>
和 <span></span>
标签没有被任何东西包裹。
<template></template>
很特别,因为 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
小测验
请在 <span></span>
标签中添加一个 @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 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。