最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue數(shù)組更新及過(guò)濾排序功能

 更新時(shí)間:2017年08月10日 15:49:10   作者:小火柴的藍(lán)色理想  
Vue為了增加列表渲染的功能,增加了一組觀察數(shù)組的方法,而且可以顯示一個(gè)數(shù)組的過(guò)濾或排序的副本。本文將詳細(xì)介紹Vue數(shù)組更新及過(guò)濾排序

前面的話

  Vue為了增加列表渲染的功能,增加了一組觀察數(shù)組的方法,而且可以顯示一個(gè)數(shù)組的過(guò)濾或排序的副本。本文將詳細(xì)介紹Vue數(shù)組更新及過(guò)濾排序

變異方法

  Vue 包含一組觀察數(shù)組的變異方法,它們將會(huì)觸發(fā)視圖更新,包含以下方法

push() 接收任意數(shù)量的參數(shù),把它們逐個(gè)添加到數(shù)組末尾,并返回修改后數(shù)組的長(zhǎng)度

pop() 從數(shù)組末尾移除最后一項(xiàng),減少數(shù)組的length值,然后返回移除的項(xiàng)

shift() 移除數(shù)組中的第一個(gè)項(xiàng)并返回該項(xiàng),同時(shí)數(shù)組的長(zhǎng)度減1

unshift() 在數(shù)組前端添加任意個(gè)項(xiàng)并返回新數(shù)組長(zhǎng)度

splice() 刪除原數(shù)組的一部分成員,并可以在被刪除的位置添加入新的數(shù)組成員

sort() 調(diào)用每個(gè)數(shù)組項(xiàng)的toString()方法,然后比較得到的字符串排序,返回經(jīng)過(guò)排序之后的數(shù)組

reverse() 用于反轉(zhuǎn)數(shù)組的順序,返回經(jīng)過(guò)排序之后的數(shù)組

<div id="example">
 <div>
 <button @click='push'>push</button>
 <button @click='pop'>pop</button>
 <button @click='shift'>shift</button>
 <button @click='unshift'>unshift</button>
 <button @click='splice'>splice</button>
 <button @click='sort'>sort</button>
 <button @click='reverse'>reverse</button>
 </div>
 <ul>
 <li v-for="item in items" >
  {{ item.message }}
 </li>
 </ul> 
</div>

<script>
var example = new Vue({
 el: '#example',
 data: {
 items: [
  {message: 'Foo' },
  {message: 'Bar' },
  {message: 'Baz' }
 ],
 addValue:{message:'match'}
 },
 methods:{
 push(){
  this.items.push(this.addValue)
 },
 pop(){
  this.items.pop()
 },
 shift(){
  this.items.shift()
 },
 unshift(){
  this.items.unshift(this.addValue)
 },
 splice(){
  this.items.splice(0,1)
 },
 sort(){
  this.items.sort()
 },
 reverse(){
  this.items.reverse()
 },
 }
})
</script>

非變異方法

  變異方法(mutation method),顧名思義,會(huì)改變被這些方法調(diào)用的原始數(shù)組。相比之下,也有非變異(non-mutating method)方法,例如: filter(), concat(), slice() 。這些不會(huì)改變?cè)紨?shù)組,但總是返回一個(gè)新數(shù)組。當(dāng)使用非變異方法時(shí),可以用新數(shù)組替換舊數(shù)組

concat() 先創(chuàng)建當(dāng)前數(shù)組一個(gè)副本,然后將接收到的參數(shù)添加到這個(gè)副本的末尾,最后返回新構(gòu)建的數(shù)組

slice() 基于當(dāng)前數(shù)組中一個(gè)或多個(gè)項(xiàng)創(chuàng)建一個(gè)新數(shù)組,接受一個(gè)或兩個(gè)參數(shù),即要返回項(xiàng)的起始和結(jié)束位置,最后返回新數(shù)組

map() 對(duì)數(shù)組的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組

filter() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組

<div id="example">
 <div>
 <button @click='concat'>concat</button>
 <button @click='slice'>slice</button>
 <button @click='map'>map</button>
 <button @click='filter'>filter</button>
 </div>
 <ul>
 <li v-for="item in items" >
  {{ item }}
 </li>
 </ul> 
</div>
<script>
var example = new Vue({
 el: '#example',
 data: {
 items: ['Foo','Bar','Baz'],
 addValue:'match'
 },
 methods:{
 concat(){
  this.items = this.items.concat(this.addValue)
 },
 slice(){
  this.items = this.items.slice(1)
 },
 map(){
  this.items = this.items.map(function(item,index,arr){
  return index + item; 
  })
 },
 filter(){
  this.items = this.items.filter(function(item,index,arr){
  return (index > 0); 
  })
 }
 }
})
</script>

  以上操作并不會(huì)導(dǎo)致Vue丟棄現(xiàn)有DOM并重新渲染整個(gè)列表。Vue實(shí)現(xiàn)了一些智能啟發(fā)式方法來(lái)最大化DOM元素重用,所以用一個(gè)含有相同元素的數(shù)組去替換原來(lái)的數(shù)組是非常高效的操作

無(wú)法檢測(cè)

  由于JS的限制, Vue 不能檢測(cè)以下變動(dòng)的數(shù)組:

  1、利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如: vm.items[indexOfItem] = newValue

  2、修改數(shù)組的長(zhǎng)度時(shí),例如: vm.items.length = newLength

<div id="example">
 <div>
 <button @click='setVal'>setVal</button>
 <button @click='setLength'>setLength</button>
 <button @click='pop'>pop</button>
 </div>
 <ul>
 <li v-for="item in items" >{{ item }}</li>
 </ul> 
 <p>{{ message }}</p> 
</div>
<script>
var watchFunc = function(){
 example.message = '數(shù)據(jù)發(fā)生變化';
 setTimeout(function(){
 example.message = '';
 },500); 
}
var example = new Vue({
 el: '#example',
 data: {
 items: ['Foo','Bar','Baz'],
 message:'',
 },
 watch:{
 items:watchFunc
 },
 methods:{
 pop(){
  this.items.pop()
 },
 setVal(){
  this.items[0]= 'match';
 },
 setLength(){
  this.items.length = 2;
 }
 }
})
</script>

  以上代碼中,直接設(shè)置值和長(zhǎng)度使用watch不能檢測(cè)到變化

  以下兩種方式都可以實(shí)現(xiàn)和vm.items[indexOfItem]=newValue相同的效果, 同時(shí)也將觸發(fā)狀態(tài)更新

// Vue.set
Vue.set(example1.items, indexOfItem, newValue)
// Array.prototype.splice
example1.items.splice(indexOfItem, 1, newValue)

   為了解決第二類(lèi)問(wèn)題,可以使用 splice

example1.items.splice(newLength)
<div id="example">
 <div>
 <button @click='setVal1'>setVal1</button>
 <button @click='setVal2'>setVal2</button>
 <button @click='setLength'>setLength</button>
 </div>
 <ul>
 <li v-for="item in items" >{{ item }}</li>
 </ul> 
 <p>{{ message }}</p> 
</div>
<script>
var watchFunc = function(){
 example.message = '數(shù)據(jù)發(fā)生變化';
 setTimeout(function(){
 example.message = '';
 },500); 
}
var example = new Vue({
 el: '#example',
 data: {
 items: ['Foo','Bar','Baz'],
 message:'',
 },
 watch:{
 items:watchFunc
 },
 methods:{
 setVal1(){
  Vue.set(this.items, 0, 'match')
 },
 setVal2(){
  this.items.splice(1, 1, 'xiaohuochai')
 }, 
 setLength(){
  this.items.splice(2)
 }
 }
})
</script>

過(guò)濾排序

  有時(shí),要顯示一個(gè)數(shù)組的過(guò)濾或排序副本,而不實(shí)際改變或重置原始數(shù)據(jù)。在這種情況下,可以創(chuàng)建返回過(guò)濾或排序數(shù)組的計(jì)算屬性

【computed】

<div id="example">
 <ul>
 <li v-for="n in evenNumbers">{{ n }}</li>
 </ul> 
</div>
<script>
var example = new Vue({
 el: '#example',
 data: {
 numbers: [ 1, 2, 3, 4, 5 ],
 },
 computed: {
 evenNumbers: function () {
  return this.numbers.filter(function (number) {
  return number % 2 === 0
  })
 }
 }
})
</script>

【methods】

  在計(jì)算屬性不適用的情況下 (例如,在嵌套 v-for 循環(huán)中) 可以使用一個(gè) method 方法

<div id="example">
 <ul>
 <li v-for="n in even(numbers)">{{ n }}</li>
 </ul> 
</div>
<script>
var example = new Vue({
 el: '#example',
 data: {
 numbers: [ 1, 2, 3, 4, 5 ],
 },
 methods: {
 even: function (numbers) {
  return numbers.filter(function (number) {
  return number % 2 === 0
  })
 }
 }
})
</script>

總結(jié)

以上所述是小編給大家介紹的Vue數(shù)組更新及過(guò)濾排序功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue如何引入遠(yuǎn)程JS文件

    Vue如何引入遠(yuǎn)程JS文件

    本篇文章主要介紹了Vue引入遠(yuǎn)程JS文件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Vue中使用md5進(jìn)行數(shù)據(jù)加密的實(shí)現(xiàn)方法

    Vue中使用md5進(jìn)行數(shù)據(jù)加密的實(shí)現(xiàn)方法

    在現(xiàn)代Web開(kāi)發(fā)中,數(shù)據(jù)安全是一個(gè)不可忽視的重要環(huán)節(jié),Vue.js作為一個(gè)流行的前端框架,不僅提供了強(qiáng)大的數(shù)據(jù)綁定和組件化功能,還支持與各種后端服務(wù)的集成,本文將探討如何在Vue應(yīng)用中使用MD5算法來(lái)加密數(shù)據(jù),從而提升應(yīng)用的安全性,需要的朋友可以參考下
    2024-10-10
  • Vue利用相反數(shù)實(shí)現(xiàn)飄窗動(dòng)畫(huà)效果

    Vue利用相反數(shù)實(shí)現(xiàn)飄窗動(dòng)畫(huà)效果

    飄窗,即一個(gè)類(lèi)似小窗子的在網(wǎng)頁(yè)上移動(dòng)的矩形元素,通常被用于一些通知類(lèi)的應(yīng)用場(chǎng)景。本文將利用相反數(shù)實(shí)現(xiàn)這一動(dòng)畫(huà)效果,需要的可以參考一下
    2022-05-05
  • Vue報(bào)錯(cuò):Injection?"xxxx"?not?found的解決辦法

    Vue報(bào)錯(cuò):Injection?"xxxx"?not?found的解決辦法

    這篇文章主要給大家介紹了關(guān)于Vue報(bào)錯(cuò):Injection?"xxxx"?not?found的解決辦法,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • vue3+vite動(dòng)態(tài)加載路由,本地路由和線上路由匹配方式

    vue3+vite動(dòng)態(tài)加載路由,本地路由和線上路由匹配方式

    這篇文章主要介紹了vue3+vite動(dòng)態(tài)加載路由,本地路由和線上路由匹配方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 快速了解Vue父子組件傳值以及父調(diào)子方法、子調(diào)父方法

    快速了解Vue父子組件傳值以及父調(diào)子方法、子調(diào)父方法

    這篇文章主要介紹了Vue父子組件傳值以及父調(diào)子方法、子調(diào)父方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Vite項(xiàng)目搭建與環(huán)境配置的完整版教程

    Vite項(xiàng)目搭建與環(huán)境配置的完整版教程

    Vite?使用?Rollup?作為默認(rèn)的構(gòu)建工具,可以將應(yīng)用程序的源代碼打包成一個(gè)或多個(gè)優(yōu)化的靜態(tài)文件,本文就來(lái)為大家介紹一下Vite如何進(jìn)行項(xiàng)目搭建與環(huán)境配置吧
    2023-09-09
  • vue項(xiàng)目中使用scss詳細(xì)方法步驟

    vue項(xiàng)目中使用scss詳細(xì)方法步驟

    這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中使用scss的詳細(xì)方法步驟,scss是一種css預(yù)處理語(yǔ)言,定義了一種新的專(zhuān)門(mén)的編程語(yǔ)言,編譯后形成正常的css文件,為css增加一些編程特性,無(wú)需考慮瀏覽器的兼容性,讓css更加簡(jiǎn)潔、適應(yīng)性更強(qiáng),可讀性更佳,需要的朋友可以參考下
    2023-11-11
  • 前端小技能之Vue集成百度離線地圖功能總結(jié)

    前端小技能之Vue集成百度離線地圖功能總結(jié)

    最近項(xiàng)目里集成了百度地圖的一些功能,所以下面這篇文章主要給大家介紹了關(guān)于前端小技能之Vue集成百度離線地圖功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • uniapp仿微信聊天界面效果實(shí)例(vue3組合式版本)

    uniapp仿微信聊天界面效果實(shí)例(vue3組合式版本)

    這篇文章主要介紹了uniapp仿微信聊天界面的相關(guān)資料,這里提及了一個(gè)時(shí)間工具包timeMethod.js,該工具包可能提供了一系列時(shí)間處理的功能,如格式化日期、計(jì)算時(shí)間差等,以便在消息格式中正確展示時(shí)間信息,使用此類(lèi)工具包可以大大提高開(kāi)發(fā)效率,需要的朋友可以參考下
    2024-10-10

最新評(píng)論

临颍县| 广丰县| 侯马市| 清徐县| 江安县| 苏州市| 镇雄县| 鞍山市| 巫山县| 囊谦县| 滦南县| 三明市| 东阿县| 怀化市| 古蔺县| 石棉县| 叙永县| 儋州市| 恩施市| 旬邑县| 名山县| 正阳县| 含山县| 上杭县| 调兵山市| 泽普县| 贵阳市| 丰顺县| 沂水县| 龙海市| 土默特右旗| 五指山市| 黄冈市| 高平市| 揭阳市| 黑龙江省| 青冈县| 雷波县| 如皋市| 凌云县| 蒙城县|