你可以使用 v-repeat 指令來基於 ViewModel 上的物件陣列渲染列表。對於數組中的每個對象,該指令將建立一個以該對像作為其 $data 對象的子 Vue 實例。這些子實例繼承父實例的資料作用域,因此在重複的範本元素中你既可以存取子實例的屬性,也可以存取父實例的屬性。此外,你也可以透過 $index 屬性來取得目前實例對應的陣列索引。
<ul id="demo"> <li v-repeat="items" class="item-{{$index}}"> {{$index}} - {{parentMsg}} {{childMsg}} </li> </ul>
var demo = new Vue({ el: '#demo', data: { parentMsg: 'Hello', items: [ { childMsg: 'Foo' }, { childMsg: 'Bar' } ] } })
查看一下效果,應該很容易得到結果
塊級重複
有時我們可能需要重複一個包含多個節點的塊,這時可以用 標籤包裹這個塊。這裡的 標籤只起到語意上的包裹作用,本身不會被渲染出來。例如:
<ul> <template v-repeat="list"> <li>{{msg}}</li> <li class="divider"></li> </template> </ul>
簡單值陣列
簡單值 (primitive value) 即字串、數字、boolean 等並非物件的值。對於包含簡單值的數組,你可用$value 直接存取值:
<ul id="tags"> <li v-repeat="tags"> {{$value}} </li> </ul>
new Vue({ el: '#tags', data: { tags: ['JavaScript', 'MVVM', 'Vue.js'] } })
使用別名
有時我們可能想要更明確地存取
使用別名
的隱名符號父作用域。你可以透過提供一個參數給v-repeat 指令並用它作為將被迭代項的別名:
<ul id="users"> <li v-repeat="user : users"> {{user.name}} - {{user.email}} </li> </ul>
var users = new Vue({ el: '#users', data: { users: [ { name: 'Foo Bar', email: 'foo@bar.com' }, { name: 'John Doh', email: 'john@doh.com' } ] } });
變異方法
Vue.js包括push(), pop(), shift(), unshift(), splice(), sort() 和reverse()) 進行了攔截,因此呼叫這些方法也將自動觸發視圖更新。// 以下操作会触发 DOM 更新 demo.items.unshift({ childMsg: 'Baz' }) demo.items.pop()下面是一個示範的例子,點擊按鈕的時候資料項目會移除
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/0.12.16/vue.min.js"></script> </head> <body> <ul id="tags"> <li v-repeat="tags"> {{$value}} </li> </ul> <input type="button" value="测试" onclick="myClick();"> <script> var tag = new Vue({ el: '#tags', data: { tags: ['标签一', '标签二', '标签三'] } }); function myClick(){ tag.tags.pop(); } </script> </body> </html>
set () 和$remove() 。
你應該避免直接透過索引來設定資料綁定數組中的元素,例如 demo.items[0] = {},因為這些改動是無法被 Vue.js 偵測到的。你應該使用擴充的 $set() 方法:
// 不要用 `demo.items[0] = ...` demo.items.$set(0, { childMsg: 'Changed!'})
// 删除索引为 0 的元素。 demo.items.$remove(0)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/0.12.16/vue.min.js"></script> </head> <body> <ul id="tags"> <li v-repeat="tags"> {{$value}} </li> </ul> <input type="button" value="测试" onclick="myClick();"> <script> var tag = new Vue({ el: '#tags', data: { tags: ['标签一', '标签二', '标签三'] } }); function myClick(){ //tag.tags.pop(); //tag.tags[0] = '修改后的内容不生效'; tag.tags.$set(0, '修改后的内容生效'); tag.tags.$remove(1); } </script> </body> </html>
當你使用非變異方法,例如filter(), concat() 或 slice(),傳回的陣列將是一個不同的實例。在此情況下,你可以用新陣列取代舊的陣列:
demo.items = demo.items.filter(function (item) { return item.childMsg.match(/Hello/) })
你可能會認為這將導致整個清單的 DOM 被銷毀並重新渲染。但別擔心,Vue.js 能夠辨識一個陣列元素是否已有關聯的 Vue 實例, 並盡可能地進行有效重複使用。
使用track-by(vue中track-by屬性)
在某些情況下,你可能需要以全新的物件(例如 API 呼叫所傳回的物件)去替換陣列。如果你的每一個資料物件都有一個唯一的 id 屬性,那麼你可以使用 track-by 特性參數給 Vue.js 一個提示,這樣它就可以重複使用已有的具有相同 id 的 Vue 實例和 DOM 節點。例如:你的資料是這個樣子的
{ items: [ { _uid: '88f869d', ... }, { _uid: '7496c10', ... } ] }
那麼你可以像這樣給予提示:
<div v-repeat="items" track-by="_uid"> <!-- content --> </div>
_m裡
'88f869d' 的新對象,它就會知道可以直接重複使用有同樣_uid 的已有實例。在使用全新資料重新渲染大型 v-repeat 清單時,合理使用 track-by 能大幅提升效能。
遍歷物件
你也可以使用 v-repeat 遍歷一個物件的所有屬性。每個重複的實例會有一個特殊的屬性 $key。對於簡單值,你也可以像存取數組中的簡單值那樣使用 $value 屬性。<ul id="repeat-object"> <li v-repeat="primitiveValues">{{$key}} : {{$value}}</li> <li>===</li> <li v-repeat="objectValues">{{$key}} : {{msg}}</li> </ul>
new Vue({ el: '#repeat-object', data: { primitiveValues: { FirstName: 'John', LastName: 'Doe', Age: 30 }, objectValues: { one: { msg: 'Hello' }, two: { msg: 'Bye' } } } });
在 ECMAScript 5 中,對於新增一個屬性,或為物件中刪除一個屬性時,沒有機制可以偵測到這兩種情況。針對這個問題,Vue.js 中的被觀察對象會被加入三個擴充方法: $add(key, value), $set(key, value) 和 $delete(key)。這些方法可以用於在新增 / 刪除觀察對象的屬性時觸發對應的視圖更新。方法 $add 和 $set 的不同之處在於當指定的鍵已經在物件中存在時 $add 將提前返回,所以調用 obj.$add(key) 並不會以 undefined 覆蓋已有的值。
迭代值域
v-repeat 也可以接受一個整數。在這種情況下,它將重複顯示一個模板多次。下面的例子將會迭代3次。<div id="range"> <div v-repeat="val">Hi! {{$index}}</div> </div>
new Vue({ el: '#range', data: { val: 3 } });
數組過濾器
有時我們只需要顯示一個陣列的過濾或排序的版本,而不需要實際重置或原始資料。 Vue 提供了兩個內建的過濾器來簡化此類需求: filterBy 和 orderBy。 🎜<input v-model="searchText"> <ul> <li v-repeat="users | filterBy searchText">{{name}}</li> </ul>🎜 🎜
以上就是本文的全部內容,希望對大家的學習有幫助

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何對多個鏈接進行並發GET請求並依次判斷返回結果?在Tampermonkey腳本中,我們經常需要對多個鏈...


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

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

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

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中