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

Vue數組更新及過濾排序功能

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

前面的話

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

變異方法

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

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

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

shift() 移除數組中的第一個項并返回該項,同時數組的長度減1

unshift() 在數組前端添加任意個項并返回新數組長度

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

sort() 調用每個數組項的toString()方法,然后比較得到的字符串排序,返回經過排序之后的數組

reverse() 用于反轉數組的順序,返回經過排序之后的數組

<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),顧名思義,會改變被這些方法調用的原始數組。相比之下,也有非變異(non-mutating method)方法,例如: filter(), concat(), slice() 。這些不會改變原始數組,但總是返回一個新數組。當使用非變異方法時,可以用新數組替換舊數組

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

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

map() 對數組的每一項運行給定函數,返回每次函數調用的結果組成的數組

filter() 對數組中的每一項運行給定函數,該函數會返回true的項組成的數組

<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>

  以上操作并不會導致Vue丟棄現有DOM并重新渲染整個列表。Vue實現了一些智能啟發(fā)式方法來最大化DOM元素重用,所以用一個含有相同元素的數組去替換原來的數組是非常高效的操作

無法檢測

  由于JS的限制, Vue 不能檢測以下變動的數組:

  1、利用索引直接設置一個項時,例如: vm.items[indexOfItem] = newValue

  2、修改數組的長度時,例如: 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 = '數據發(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>

  以上代碼中,直接設置值和長度使用watch不能檢測到變化

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

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

   為了解決第二類問題,可以使用 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 = '數據發(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>

過濾排序

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

【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】

  在計算屬性不適用的情況下 (例如,在嵌套 v-for 循環(huán)中) 可以使用一個 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>

總結

以上所述是小編給大家介紹的Vue數組更新及過濾排序功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • Vue如何引入遠程JS文件

    Vue如何引入遠程JS文件

    本篇文章主要介紹了Vue引入遠程JS文件,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Vue中使用md5進行數據加密的實現方法

    Vue中使用md5進行數據加密的實現方法

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

    Vue利用相反數實現飄窗動畫效果

    飄窗,即一個類似小窗子的在網頁上移動的矩形元素,通常被用于一些通知類的應用場景。本文將利用相反數實現這一動畫效果,需要的可以參考一下
    2022-05-05
  • Vue報錯:Injection?"xxxx"?not?found的解決辦法

    Vue報錯:Injection?"xxxx"?not?found的解決辦法

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

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

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

    快速了解Vue父子組件傳值以及父調子方法、子調父方法

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

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

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

    vue項目中使用scss詳細方法步驟

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

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

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

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

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

最新評論

乌苏市| 延川县| 龙山县| 泽普县| 霍山县| 二连浩特市| 任丘市| 稻城县| 乾安县| 唐河县| 乡城县| 尼勒克县| 石嘴山市| 修水县| 玉林市| 广平县| 苍山县| 延边| 怀宁县| 平果县| 哈密市| 金门县| 烟台市| 内黄县| 临江市| 朝阳县| 铁力市| 平远县| 翁牛特旗| 贡嘎县| 博白县| 诸暨市| 阿尔山市| 和田市| 双鸭山市| 隆安县| 江津市| 大关县| 西城区| 澜沧| 达孜县|