国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue3【列表渲染】v-for 詳細(xì)介紹(vue中的“循環(huán)”)

這篇具有很好參考價(jià)值的文章主要介紹了vue3【列表渲染】v-for 詳細(xì)介紹(vue中的“循環(huán)”)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

文章簡(jiǎn)介

在本文之前已經(jīng)有文章簡(jiǎn)單概要介紹過(guò)vue中的渲染,點(diǎn)擊幫你快速?gòu)?fù)習(xí)????,包括條件渲染列表渲染
二者同樣重要,但是對(duì)于項(xiàng)目而言,使用更多的是列表渲染,主要表現(xiàn)為“循環(huán)”。 下面讓我們繼續(xù)深入地了解列表渲染的相關(guān)內(nèi)容吧~??????

v-for 主要內(nèi)容

??item in items

我們可以使用 v-for 指令基于一個(gè)數(shù)組來(lái)渲染一個(gè)列表。v-for 指令的值需要使用 item in items 形式的特殊語(yǔ)法,其中 items 是源數(shù)據(jù)的數(shù)組,而 item 是迭代項(xiàng)的別名。

解釋一下item in items可以理解為item是items中的一個(gè)迭代項(xiàng),可以是標(biāo)題元素,可以是各種類型的數(shù)據(jù)集合…等等,你都可以從把這些在也頁(yè)面中反復(fù)出現(xiàn)的內(nèi)容形式通過(guò)循環(huán),也就是v-for和item in items語(yǔ)法簡(jiǎn)單的表現(xiàn)出來(lái),實(shí)現(xiàn) 動(dòng)態(tài)綁定 的一個(gè)效果】

舉例說(shuō)明
ts

const items = ref([{ message: 'Foo' }, { message: 'Bar' }]) // 定義 items為一個(gè)響應(yīng)式數(shù)組 存放message的兩個(gè)元素信息

此時(shí),你可以思考一下,如果想把這兩個(gè)數(shù)據(jù)顯示在頁(yè)面里,是不是需要輸入兩次。而且是需要手動(dòng)讀取數(shù)據(jù)的,這樣顯然很不智能。如下:

<li>{{Foo}}</li>
<li>{{Bar}}</li>

元素個(gè)數(shù)越多,你所需要編寫的行數(shù)就越多,此時(shí)就需要循環(huán)的幫助,只需要v-for加上一行模板語(yǔ)法,就能輕松實(shí)現(xiàn)效果。
template

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

v-for 塊中可以完整地訪問(wèn)父作用域內(nèi)的屬性和變量。v-for 也支持使用可選的第二個(gè)參數(shù)表示當(dāng)前項(xiàng)的位置索引。

ts

const parentMessage = ref('Parent')
const items = ref([{ message: 'Foo' }, { message: 'Bar' }])

template

<!-- index是item所在數(shù)組items中的下標(biāo)-->
<li v-for="(item, index) in items">
  {{ parentMessage }} - {{ index }} - {{ item.message }} 
</li>

運(yùn)行效果
vue3 v-for,Vue,vue.js,javascript,前端,typescript,前端框架

v-for 變量的作用域

v-for的變量作用域和下面的 JavaScript 代碼很類似:

js

const parentMessage = 'Parent'
const items = [
  /* ... */
]

items.forEach((item, index) => {
  // 可以訪問(wèn)外層的 `parentMessage`
  // 而 `item` 和 `index` 只在這個(gè)作用域可用
  console.log(parentMessage, item.message, index)
})

注意 v-for 是如何對(duì)應(yīng) forEach 回調(diào)的函數(shù)簽名的。
實(shí)際上,你也可以在定義 v-for 的變量別名時(shí)使用解構(gòu),和解構(gòu)函數(shù)參數(shù)類似:

template

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

<!-- 有 index 索引時(shí) -->
<li v-for="({ message }, index) in items">
  {{ message }} {{ index }}
</li>

對(duì)于多層嵌套的 v-for,作用域的工作方式和函數(shù)的作用域很類似。每個(gè) v-for 作用域都可以訪問(wèn)到父級(jí)作用域
template

<li v-for="item in items">
  <span v-for="childItem in item.children">
    {{ item.message }} {{ childItem }}
  </span>
</li>

你也可以使用 of 作為分隔符來(lái)替代 in,這更接近 JavaScript 的迭代器語(yǔ)法:
template

<div v-for="item of items"></div>

v-for 與對(duì)象

你也可以使用 v-for 來(lái)遍歷一個(gè)對(duì)象的所有屬性。遍歷的順序會(huì)基于對(duì)該對(duì)象調(diào)用 Object.keys() 的返回值來(lái)決定。
ts

const myObject = reactive({
  title: 'title',
  author: 'GunGunxs',
  publishedDate: '20221015'
})

template

<ul>
  <li v-for="value in myObject">
    {{ value }}
  </li>
</ul>

可以通過(guò)提供第二個(gè)參數(shù)表示屬性名 (例如 key):
template

<li v-for="(value, key) in myObject">
  {{ key }}: {{ value }}
</li>

第三個(gè)參數(shù)表示位置索引
template

<li v-for="(value, key, index) in myObject">
  {{ index }}. {{ key }}: {{ value }}
</li>

運(yùn)行結(jié)果:
vue3 v-for,Vue,vue.js,javascript,前端,typescript,前端框架

在 v-for 里使用范圍值

v-for 可以直接接受一個(gè)整數(shù)值。在這種用例中,會(huì)將該模板基于1...n 的取值范圍重復(fù)多次

<span v-for="n in 10">{{ n }}</span>

注意 此處 n 的初值是從 1 開(kāi)始而非 0。

??<template> 上的 v-for

可以在 標(biāo)簽上使用 v-for 來(lái)渲染一個(gè)包含多個(gè)元素的塊。
例如:
template

<ul>
  <template v-for="item in items">
    <li>{{ item.msg }}</li>
    <li class="divider" role="presentation"></li>
  </template>
</ul>

v-for 與 v-if

注意同時(shí)使用 v-ifv-for 是不推薦的,因?yàn)檫@樣二者的優(yōu)先級(jí)不明顯

當(dāng)它們同時(shí)存在于一個(gè)節(jié)點(diǎn)上時(shí),v-ifv-for 的優(yōu)先級(jí)更高。這意味著 v-if 的條件將無(wú)法訪問(wèn)到 v-for 作用域內(nèi)定義的變量別名。
template

<!--
 這會(huì)拋出一個(gè)錯(cuò)誤,因?yàn)閷傩詉tem此時(shí)
 沒(méi)有在該實(shí)例上定義
-->
<li v-for="item in items" v-if="!item.isComplete">
  {{ item.name }}
</li>

在外新包裝一層 <template> 再在其上使用 v-for 可以解決這個(gè)問(wèn)題 (這也更加明顯易讀):
template

<template v-for="item in items">
  <li v-if="!item.isComplete">
    {{ item.name }}
  </li>
</template>

??通過(guò) key 管理狀態(tài)

vue 默認(rèn)按照 “就地更新” 的策略來(lái)更新通過(guò) v-for 渲染的元素列表

  • 當(dāng)數(shù)據(jù)項(xiàng)的順序改變時(shí),Vue 不會(huì)隨之移動(dòng) DOM 元素的順序,而是就地更新每個(gè)元素,確保它們?cè)谠局付ǖ乃饕恢蒙箱秩尽?/em>

默認(rèn)模式是高效的,但只適用于列表渲染輸出的結(jié)果不依賴子組件狀態(tài)或者臨時(shí) DOM 狀態(tài) (表單輸入值) 的情況。

  • 為了給 vue 一個(gè)提示,以便它可以跟蹤每個(gè)節(jié)點(diǎn)的標(biāo)識(shí),從而重用和重新排序現(xiàn)有的元素,你需要為每個(gè)元素對(duì)應(yīng)的塊提供一個(gè)唯一的 key attribute
    template
<div v-for="item in items" :key="item.id">
  <!-- 內(nèi)容 -->
</div>

當(dāng)你使用 <template v-for> 時(shí),key 應(yīng)該被放置在這個(gè) <template> 容器上:
template

<template v-for="todo in todos" :key="todo.name">
  <li>{{ todo.name }}</li>
</template>

注意

  • key 在這里是一個(gè)通過(guò) v-bind 綁定的特殊 attribute。
  • 不要和在 v-for 中使用對(duì)象里所提到的對(duì)象屬性名相混淆。

推薦在任何可行的時(shí)候?yàn)?v-for 提供一個(gè) key attribute,除非所迭代的 DOM 內(nèi)容非常簡(jiǎn)單 (例如:不包含組件或有狀態(tài)的 DOM 元素)

key 綁定的值期望是一個(gè)基礎(chǔ)類型的值,例如字符串或 number 類型。不要用對(duì)象作為 v-for 的 key。
vue3 v-for,Vue,vue.js,javascript,前端,typescript,前端框架

<ul>
  <li v-for="item in items" :key="item.id">...</li>
</ul>

??組件上使用 v-for

直接在組件上使用 v-for,和在一般的元素上使用沒(méi)有區(qū)別 (別忘記提供一個(gè) key)
template

<MyComponent v-for="item in items" :key="item.id" />

但這不會(huì)自動(dòng)將任何數(shù)據(jù)傳遞給組件(因?yàn)榻M件有自己獨(dú)立的作用域)
為了將迭代后的數(shù)據(jù)傳遞到組件中,我們還需要傳遞 props
template

<MyComponent
  v-for="(item, index) in items"
  :item="item"
  :index="index"
  :key="item.id"
/>

??不自動(dòng)將 item 注入組件的原因是,這會(huì)使組件與 v-for 的工作方式緊密耦合。明確其數(shù)據(jù)的來(lái)源可以使組件在其他情況下重用。

------------------------------------------------------------------
????這是一個(gè)簡(jiǎn)單的 Todo List 的例子,展示了如何通過(guò) v-for 來(lái)渲染一個(gè)組件列表,并向每個(gè)實(shí)例中傳入不同的數(shù)據(jù)。
App.vue 中 TS部分

<script setup lang="ts">
import { ref } from 'vue'
import TodoItem from './TodoItem.vue' // 從外部引入
  
const newTodoText = ref('')

// 這里的todos當(dāng)然是可以從外部引入的
// 在項(xiàng)目中多采用模塊化 專門的東西放在專門的文件中
const todos = ref([
  {
    id: 1,
    title: '吃飯'
  },
  {
    id: 2,
    title: '睡覺(jué)'
  },
  {
    id: 3,
    title: '學(xué)習(xí)'
  }
])

let nextTodoId = 4 // 新增元素的id初始值為4

// 點(diǎn)擊事件觸發(fā)的添加事件
function addNewTodo() { // 這里的函數(shù)也可以使用箭頭函數(shù)
  todos.value.push({
    id: nextTodoId++, // id自增排在之前元素的下面
    title: newTodoText.value // title
  })
  newTodoText.value = '' // 新增選項(xiàng)的內(nèi)容 這里設(shè)置為空
}
</script>

template部分

<template>
    <!-- 綁定點(diǎn)擊事件 點(diǎn)擊添加事件-->
	<form v-on:submit.prevent="addNewTodo"> 
    <label for="new-todo">Add a todo</label>
    <input
      v-model="newTodoText"
      id="new-todo"
      placeholder="請(qǐng)輸入一些東西"
    />
    <button>Add</button>
  </form>
  <ul>
    <todo-item
      v-for="(todo, index) in todos"
      :key="todo.id" 
      :title="todo.title"
      @remove="todos.splice(index, 1)"
    ></todo-item> 
    <!-- 綁定todos中元素以及對(duì)應(yīng)的下標(biāo)
     綁定他們各自的key值為其id屬性 
     綁定他們各自的title屬性
     綁定點(diǎn)擊事件 點(diǎn)擊按鈕觸發(fā)刪除事件 -->
  </ul>
</template>

TodoItem.vue中 TS部分

<script setup lang="ts">
defineProps(['title'])
defineEmits(['remove'])
</script>

template

<template>
  <li>
    {{ title }}
    <button @click="$emit('remove')">Remove</button>
  </li>
</template>

運(yùn)行效果:
vue3 v-for,Vue,vue.js,javascript,前端,typescript,前端框架
來(lái)試試添加效果:
vue3 v-for,Vue,vue.js,javascript,前端,typescript,前端框架
來(lái)試試刪除效果:
vue3 v-for,Vue,vue.js,javascript,前端,typescript,前端框架

summary

以上就是v-for的深入展開(kāi),由本人結(jié)合資料和分析總結(jié)得出,若有不足和錯(cuò)誤,請(qǐng)大家及時(shí)指出,我會(huì)第一時(shí)間進(jìn)行修改!

下期預(yù)告

vue3【偵測(cè) 過(guò)濾】filter 數(shù)據(jù)變化偵測(cè)&信息篩選過(guò)濾

從鍵盤的敲擊聲中 感受知識(shí)的永恒律動(dòng)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-836523.html

到了這里,關(guān)于vue3【列表渲染】v-for 詳細(xì)介紹(vue中的“循環(huán)”)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue中的v-for循環(huán)

    如果是一個(gè)變量,那么保存的是對(duì)象中的屬性值 如果是兩個(gè)變量,那么第一個(gè)變量保存的是屬性值,第二個(gè)變量保存的是屬性名 如果是三個(gè)變量,那么第一個(gè)變量保存的是屬性值,第二個(gè)變量保存的是屬性名,第三個(gè)變量保存的是下標(biāo) v-for=\\\"o1 in obj\\\" ? ? ? ? ?o1:屬性值 v-f

    2024年01月17日
    瀏覽(23)
  • [vue]v-for循環(huán)出的列表如何實(shí)現(xiàn)每一項(xiàng)單獨(dú)展開(kāi)收起

    [vue]v-for循環(huán)出的列表如何實(shí)現(xiàn)每一項(xiàng)單獨(dú)展開(kāi)收起

    展開(kāi)收起最后一項(xiàng)的內(nèi)容,展開(kāi)收起的圖標(biāo)和信息改變 HTML代碼 javasript data中聲明要循環(huán)的數(shù)據(jù)、當(dāng)前的下標(biāo)(string類型) data中聲明要循環(huán)的數(shù)據(jù)、當(dāng)前的下標(biāo)數(shù)組類型(array) 思路:判斷當(dāng)年下標(biāo)是否在數(shù)組下標(biāo)中來(lái)控制展開(kāi)收起,不存在就將該下標(biāo)加入數(shù)組,再點(diǎn)擊一次

    2024年02月12日
    瀏覽(29)
  • 已解決:Vue改變數(shù)據(jù)后界面不自動(dòng)渲染,Vue中使用v-for遍歷對(duì)象數(shù)組,當(dāng)給其中某個(gè)元素對(duì)象重新賦值之后,頁(yè)面組件列表沒(méi)有渲染更新。

    問(wèn)題如標(biāo)題所說(shuō),Vue中使用v-for遍歷對(duì)象數(shù)組,當(dāng)給數(shù)組其中某個(gè)元素對(duì)象重新賦值之后,頁(yè)面組件列表沒(méi)有及時(shí)更新渲染,而是在頁(yè)面進(jìn)行了其他的渲染操作以后列表才更新出來(lái)新的數(shù)據(jù),那同樣給對(duì)象內(nèi)的屬性值賦值也可能存在不渲染的情況,一并解決,尤其發(fā)生在網(wǎng)絡(luò)

    2024年02月06日
    瀏覽(21)
  • Element通過(guò)v-for循環(huán)渲染的form表單校驗(yàn)

    Element通過(guò)v-for循環(huán)渲染的form表單校驗(yàn)

    需求:有個(gè)表單信息是v-for渲染的,例如下圖,通過(guò)循環(huán)遍歷實(shí)現(xiàn)新增和刪除模塊,按照平時(shí)的寫法實(shí)現(xiàn)校驗(yàn),是不能實(shí)現(xiàn)我們想要的效果,根據(jù)這個(gè)需求,我找到了一個(gè)解決方法 ? 1.HTML? ?2.JS ?注: 1.循環(huán)的數(shù)據(jù)中,每個(gè)el-form-item都寫rules、prop 2.rules為data中rules對(duì)象對(duì)應(yīng)屬

    2024年02月12日
    瀏覽(29)
  • 微信小程序和 Vue 中的遍歷循環(huán)和列表渲染有一些區(qū)別。

    在微信小程序中,我們可以使用 wx:for 指令來(lái)進(jìn)行遍歷循環(huán),例如: 這里的 items 是一個(gè)數(shù)組,wx:for 指令會(huì)遍歷這個(gè)數(shù)組,并將數(shù)組中的每個(gè)元素賦值給 item 變量,然后在模板中使用 {{item}} 來(lái)顯示每個(gè)元素的值。wx:key 屬性用于指定每個(gè)元素的唯一標(biāo)識(shí)符,以便在更新列表時(shí)能

    2024年02月09日
    瀏覽(19)
  • 教程3 Vue3條件渲染指令(v-if、v-else、v-else-if、v-show、v-for)

    教程3 Vue3條件渲染指令(v-if、v-else、v-else-if、v-show、v-for)

    v-if 指令用于條件性地渲染一塊內(nèi)容。這塊內(nèi)容只會(huì)在指令的表達(dá)式返回真值時(shí)才被渲染。 可以使用 v-else 為 v-if 添加一個(gè)“else 區(qū)塊”。 v-else-if 提供的是相應(yīng)于 v-if 的“else if 區(qū)塊”。它可以連續(xù)多次重復(fù)使用。 可以用來(lái)按條件顯示一個(gè)元素的指令是 v-show。 v-if、v-else、

    2024年02月11日
    瀏覽(20)
  • vue3 antd項(xiàng)目實(shí)戰(zhàn)——radiogroup單選組合、radiobutton單選按鈕【v-model雙向綁定數(shù)據(jù)、v-for循環(huán)輸出options選擇項(xiàng)】

    vue3 antd項(xiàng)目實(shí)戰(zhàn)——radiogroup單選組合、radiobutton單選按鈕【v-model雙向綁定數(shù)據(jù)、v-for循環(huán)輸出options選擇項(xiàng)】

    ????更多內(nèi)容見(jiàn)Ant Design Vue官方文檔 ???? vue3+ant design vue+ts實(shí)戰(zhàn)【ant-design-vue組件庫(kù)引入】 ??vue3【列表渲染】v-for 詳細(xì)介紹(vue中的“循環(huán)”) 最近在項(xiàng)目開(kāi)發(fā)中需要使用到 ant design vue 組件庫(kù)的 單選框(Radio)組件 。所以本期文章會(huì)詳細(xì)地教大家 如何使用Radio單選框 。

    2024年02月16日
    瀏覽(25)
  • Vue3的組合式API中如何使用setup()函數(shù)中的條件渲染和循環(huán)渲染

    首先,讓我們來(lái)了解一下什么是Vue3的組合式API。組合式API是一種在Vue3中用于構(gòu)建組件的方式,它使用函數(shù)式編程的方法來(lái)組織代碼,讓你的組件更加清晰、易于理解和維護(hù)。而setup()函數(shù)則是組合式API的核心,它用于初始化組件并返回包含組件數(shù)據(jù)的對(duì)象。 現(xiàn)在,讓我們來(lái)看

    2024年02月11日
    瀏覽(20)
  • Vue3.2+TS在v-for的時(shí)候,循環(huán)處理時(shí)間,將其變成xx-xx-xx xx:xx:xx格式,最后教給大家自己封裝一個(gè)時(shí)間hooks,直接復(fù)用

    Vue3.2+TS在v-for的時(shí)候,循環(huán)處理時(shí)間,將其變成xx-xx-xx xx:xx:xx格式 最后教給大家自己封裝一個(gè)時(shí)間hooks,直接復(fù)用 1.沒(méi)有封裝,直接使用 假如我們現(xiàn)在其他地方還需要用到這個(gè),那么我們可以把這個(gè)方法封裝成一個(gè)hooks,用以復(fù)用 1.在src目錄下,新建一個(gè)utils文件夾,定義一個(gè)

    2024年02月13日
    瀏覽(19)
  • vue+Element項(xiàng)目中v-for循環(huán)+表單驗(yàn)證

    vue+Element項(xiàng)目中v-for循環(huán)+表單驗(yàn)證

    表單驗(yàn)證的時(shí)候: prop改為 “:prop”,形式為\\\'input.\\\' + index + \\\'.ptock\\\' \\\'input.\\\' + index + \\\'.ptock’就是數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù) 每一個(gè)循環(huán)中的都需要加:rules :prop=\\\"\\\'input.\\\' + index + \\\'.ptock\\\'\\\"的寫法也可以是 模板字符串 ?

    2024年02月15日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包