搜尋
首頁web前端Vue.jsVue.js實戰入門:如何對陣列和物件進行循環

Vue.js實戰入門:如何對陣列和物件進行循環

上一節中(課程第三部分) 我們學習如何使用v-ifv -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: &#39;#app&#39;,
      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> 標籤。

    <li>

    <li>

    <li>

    #注意,
games

是我們前面在data 中加入的屬性,所以我們要用這個變數名稱。

##game 這個變數(單數)是由我們自己定義的,我們可以用item

gametitle 或其他我們覺得合適的名稱。但是一定要明白,這個game

是你在循環裡面要用的變數。

最後,在我們的

<li> 標籤裡面,我們要輸出game 變數的內容,所以當我們循環運行的時候,將會依序把games 陣列中的字串輸出到< ;li> 標籤中。

在瀏覽器內打開我們的

index.html

文件,你應該會看到
    games<li> 陣列內的內容被輸出到螢幕上。

    提升點難度 到目前為止,還不錯吧?v-for實際上是一個非常簡單的概念,但是這個例子太無聊了。讓我們把事情變得更複雜有趣一點,在我們的數組中包含一些對象,並配合著v-if

    使用,怎麼樣?######首先,我們用一些更有趣的數據來更新我們的###games### 屬性。###
    data: {
      games: [
        { name: &#39;Super Mario 64&#39;, console: &#39;Nintendo 64&#39;, rating: 4 },
        { name: &#39;The Legend of Zelda Ocarina of Time&#39;, console: &#39;Nintendo 64&#39;, rating: 5 },
        { name: &#39;Secret of Mana&#39;, console: &#39;Super Nintendo&#39;, rating: 4 },
        { name: &#39;Fallout 76&#39;, console: &#39;Multiple&#39;, rating: 1 },
        { name: &#39;Super Metroid&#39;, console: &#39;Super Nintendo&#39;, rating: 6 }
      ]
    },
    ###如果你現在運行我們的程序,它不會出錯,但它只會以字串的格式輸出###games### 裡的對象,這不太美觀。事實上,我們要徹底刪掉我們的###
      ### 標籤,用###
      ### 標籤來輸出我們的訊息。(別擔心,用了div 還是會很難看?)#######將整個###
      <li>

      看看 <h1></h1> 标签. 因为 game 是一个对象,而这个对象里又有自己的 nameconsolerating 属性。在 <h1></h1> 里面,我们要输出 game 内的 game.namegame.console。正如你现在所看到的那样,v-for 并不像我们之前只输出 <li> 标签,实际上你可以根据你的需要输出不同的 HTML 标签。

      <li>

      嵌套的 v-for。在 span 标签里面,我们有一个嵌套的 v-for 循环(这完全是可以的),只是有点不同,在这里我们没有循环数组或对象。而是循环了一个数值(在本例中是 game.rating,循环将根据 game.rating 的值开始计数,然后输出对应数量的❤️。很简单吧?)

      <li>

      最后是 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
      <script> const app = new Vue({ el: &#39;#app&#39;, data: { games: [ { name: &#39;Super Mario 64&#39;, console: &#39;Nintendo 64&#39;, rating: 4 }, { name: &#39;The Legend of Zelda Ocarina of Time&#39;, console: &#39;Nintendo 64&#39;, rating: 5 }, { name: &#39;Secret of Mana&#39;, console: &#39;Super Nintendo&#39;, rating: 4 }, { name: &#39;Fallout 76&#39;, console: &#39;Multiple&#39;, rating: 1 }, { name: &#39;Super Metroid&#39;, console: &#39;Super Nintendo&#39;, rating: 6 } ] } }); </script>

      小测验

      请在 <span></span> 标签中添加一个 @click 事件,使它每次点击就会增加一个❤️。

      提示: 你需要将正在循环的 game 对象传递给点击方法。

      原文地址:https://dev.to/marinamosti/hands-on-vuejs-for-beginners-part-4-324l

      译文地址:https://www.php.cn/link/5a13fe4ac11f3e35f4b9f0a99cf504c0

      (学习视频分享:web前端开发编程基础视频

以上是Vue.js實戰入門:如何對陣列和物件進行循環的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
當vue.js虛擬DOM檢測變化時會發生什麼?當vue.js虛擬DOM檢測變化時會發生什麼?May 14, 2025 am 12:12 AM

whenthevue.jsvirtualdomdetectschange,itupdatesthevirlualdom,diffsit和appliesminimalchangeStothereAldom.thisprocessensuresrocessensureshighhighpperformance byformance byavoidingunnnnnnnnnnneclastory dommaniplastions。

將Vue.js的虛擬DOM視為真實DOM的鏡像是多麼準確?將Vue.js的虛擬DOM視為真實DOM的鏡像是多麼準確?May 13, 2025 pm 04:05 PM

Vue.js的VirtualDOM既是真實DOM的鏡像,又不完全是。 1.創建和更新:Vue.js基於組件定義創建VirtualDOM樹,狀態變化時先更新VirtualDOM。 2.差異和修補:通過diff操作比較新舊VirtualDOM,僅將最小變化應用到真實DOM。 3.效率:VirtualDOM允許批量更新,減少直接DOM操作,優化渲染過程。 VirtualDOM是Vue.js優化UI更新的戰略工具。

vue.js vs.反應:可伸縮性和可維護性vue.js vs.反應:可伸縮性和可維護性May 10, 2025 am 12:24 AM

Vue.js和React在可擴展性和可維護性上的表現各有優勢。 1)Vue.js易於上手,適合小型項目,CompositionAPI提升了大型項目可維護性。 2)React適用於大型複雜項目,Hooks和虛擬DOM提高了性能和可維護性,但學習曲線較陡峭。

vue.js和React的未來:趨勢和預測vue.js和React的未來:趨勢和預測May 09, 2025 am 12:12 AM

Vue.js和React的未來趨勢和預測分別是:1)Vue.js將在企業級應用中廣泛應用,並在服務端渲染和靜態站點生成方面有突破;2)React將在服務器組件和數據獲取方面創新,並進一步優化並發模式。

Netflix的前端:深入研究其技術堆棧Netflix的前端:深入研究其技術堆棧May 08, 2025 am 12:11 AM

Netflix的前端技術棧主要基於React和Redux。 1.React用於構建高性能的單頁面應用,通過組件化開發提升代碼重用性和維護性。 2.Redux用於狀態管理,確保狀態變化可預測和可追踪。 3.工具鏈包括Webpack、Babel、Jest和Enzyme,確保代碼質量和性能。 4.性能優化通過代碼分割、懶加載和服務端渲染實現,提升用戶體驗。

vue.js和前端:構建交互式用戶界面vue.js和前端:構建交互式用戶界面May 06, 2025 am 12:02 AM

Vue.js是一種漸進式框架,適用於構建交互性強的用戶界面。其核心功能包括響應式系統、組件化開發和路由管理。 1)響應式系統通過Object.defineProperty或Proxy實現數據監聽,自動更新界面。 2)組件化開發允許將界面拆分為可複用的模塊。 3)VueRouter支持單頁面應用,提升用戶體驗。

Vuejs的缺點是什麼?Vuejs的缺點是什麼?May 05, 2025 am 12:06 AM

Vue.js的主要缺點包括:1.生態系統相對較新,第三方庫和工具不如其他框架豐富;2.學習曲線在復雜功能上變得陡峭;3.社區支持與資源不如React和Angular廣泛;4.大型應用中可能遇到性能問題;5.版本升級與兼容性挑戰較大。

Netflix:揭開其前端框架Netflix:揭開其前端框架May 04, 2025 am 12:16 AM

Netflix使用React作為其前端框架。 1.React的組件化開發和虛擬DOM機制提高了性能和開發效率。 2.使用Webpack和Babel優化代碼構建和部署。 3.採用代碼分割、服務端渲染和緩存策略進行性能優化。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists

SecLists

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

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)