成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過事例講解如果在 Vue 創建及使用過濾器

開發 前端
與 AngularJS 類似,Vue.js 也有自己的數據轉換和過濾方法,但是必須記住,過濾器并不改變原始數據,它們只改變輸出并返回過濾后的數據。過濾器在很多不同的情況下都很有用,比如保持API響應盡可能干凈,在前端處理數據的格式。

 與 AngularJS 類似,Vue.js 也有自己的數據轉換和過濾方法,但是必須記住,過濾器并不改變原始數據,它們只改變輸出并返回過濾后的數據。過濾器在很多不同的情況下都很有用,比如保持API響應盡可能干凈,在前端處理數據的格式。希望通過將所有邏輯封裝在可重用代碼塊之后來避免重復和連接的情況下,它們同樣非常有效。

[[330672]]

定義和使用過濾器

使用 Vue,我們可以通過兩種不同的方式注冊過濾器:全局和本地。前者方式可以訪問所有組件中的過濾器,而后者則只能在定義該組件的組件內部使用過濾器。

過濾器是簡單的 JS 函數,它們將要轉換的值作為第一個參數,但是也可以傳入盡可能多的其他參數來返回該值的格式化版本。

全局過濾器

全局過濾器如下所示:

 

  1. // 在此示例中,我們將注冊一個全局過濾器用來在價格前面添加美元符號: 
  2.  
  3. // 聲明 
  4. Vue.filter('toUSD'function (value)) { 
  5.   return `$${value}` 
  6. // 使用 
  7. <div id="app"
  8.   <span>{{ 351.99 | toUSD }}</span> 
  9. </div> 
 

 

過濾器定義必須始終在主Vue實例之上,否則會得到一個Failed to resolve filter: toUSD錯誤。

 

  1. // DECLARATION 
  2. Vue.filter('toUSD'function (value) { 
  3.     return `$${value}`; 
  4. }); 
  5.  
  6. new Vue({ 
  7.     el: '#app'
  8.  
  9.      data: { 
  10.         price: 351.99 
  11.     } 
  12. }); 
  13.  
  14. // USAGE 
  15. <div id="app"
  16.   <span>{{ price | toUSD }}</span> 
  17. </div> 
 

 

本地過濾器

本地過濾器注冊到一個Vue組件作用域中,來看看如何創建:

 

  1. // 在此示例中,我們將創建一個過濾器,將字符串變成大寫。 
  2.  
  3. // 聲明 
  4. new Vue({ 
  5.     el: '#app'
  6.  
  7.     data: { 
  8.         name'scotch.io' 
  9.     }, 
  10.  
  11.     filters: { 
  12.        // Filter definitions 
  13.         Upper(value) { 
  14.             return value.toUpperCase(); 
  15.         } 
  16.     } 
  17. }); 
  18.  
  19. // 用法 
  20. <div id="app"
  21.   <span>{{ name | Upper }}</span> 
  22. </div> 
 

 

如上面的示例中看到的那樣,本地過濾器作為“filters”屬性內的函數存儲在Vue組件中。我們可以注冊任意多個:

 

  1. ... 
  2.     filters: { 
  3.         Upper(value) { 
  4.               return value.toUpperCase(); 
  5.         }, 
  6.         Lower(value) { 
  7.             return value. toLowerCase(); 
  8.         }, 
  9.     } 
  10. .... 

附加參數設置

正如我們在本文引言中所提到的,過濾器可以根據需要接受任意多個參數

 

  1. // 聲明 
  2. Vue.filter('readMore'function (text, length, suffix) { 
  3.     return text.substring(0, length) + suffix; 
  4. }); 
  5.  
  6. new Vue({ 
  7.     el: '#app'
  8.  
  9.     data: { 
  10.         text: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non ab modi repellendus labore facere, fugiat ipsam quae accusantium commodi voluptas nesciunt dolor similique ipsum accusamus earum eligendi suscipit laborum quod.' 
  11.     } 
  12. }); 
  13.  
  14. // 用法 
  15. <div id="app"
  16.   <span>{{ text | readMore(10, '...') }}</span> 
  17. </div> 
 

 

在此示例中,我們創建了一個名稱為“readMore”的過濾器,該過濾器會將字符串的長度限制為給定的字符數,并且還會在其中添加所選擇的后綴。Vue.js 將要過濾的值作為第一個參數 text 傳遞,length 和 suffix 作為第二個和第三個參數傳遞。

鏈式過濾器

關于過濾器,我最喜歡的一點是能夠使用管道(|)符號將它們鏈接起來,并通過一系列轉換器運行單個值。再舉一個價格的例子,我們想限制價格的小數位以及加價格的單位。

 

  1. // JS 
  2. Vue.filter('toFixed'function (price, limit) { 
  3.     return price.toFixed(limit); 
  4. }); 
  5.  
  6. Vue.filter('toUSD'function (price) { 
  7.     return `$${price}`; 
  8. }); 
  9.  
  10. new Vue({ 
  11.     el: '#app'
  12.  
  13.     data: { 
  14.         price: 435.333 
  15.     } 
  16. }); 
  17.  
  18. // HTML 
  19.  
  20. <div id="app"
  21.   <span>{{ price | toFixed(2) | toUSD }}</span> 
  22. </div> 
 

 

示例

接下來,我們通過一些事例來鞏固一下。

將 JS 值轉換為JSON字符串

 

  1. // JS 
  2. Vue.filter('json', function (value) { 
  3.     return JSON.stringify(value); 
  4. }); 
  5.  
  6. new Vue({ 
  7.     el: '#app', 
  8.  
  9.     data: { 
  10.         user: { 
  11.             username: 'johndoe', 
  12.             email: 'john@example.com', 
  13.             countryCode: 'U.K.' 
  14.         } 
  15.     } 
  16. }); 
  17.  
  18.  
  19. // HTML 
  20. <div id="app"
  21.   <span>{{ user | json }}</span> 
  22. </div> 
 

 

從對象數組中提取屬性值列表

 

  1. Vue.filter('pluck'function (objects, key) { 
  2.     return objects.map(function(object) {  
  3.         return object[key]; 
  4.     }); 
  5. }); 
  6.  
  7. new Vue({ 
  8.     el: '#app'
  9.  
  10.     data: { 
  11.         users: [ 
  12.         { 
  13.             "id": 4, 
  14.             "first_name""Eve"
  15.             "last_name""Holt" 
  16.         }, 
  17.         { 
  18.             "id": 5, 
  19.             "first_name""Charles"
  20.             "last_name""Morris" 
  21.         }, 
  22.         { 
  23.             "id": 6, 
  24.             "first_name""Tracey"
  25.             "last_name""Ramos" 
  26.         } 
  27.         ] 
  28.     } 
  29. }); 
  30.  
  31.  
  32. // HTML 
  33.  
  34. <div id="app"
  35.   <span>{{ users | pluck('last_name') }}</span> 
  36. </div> 
 

 

返回給定索引處的元素

 

  1. Vue.filter('at'function (value, index) { 
  2.     return value[index]; 
  3. }); 
  4.  
  5. new Vue({ 
  6.     el: '#app'
  7.  
  8.     data: { 
  9.         videos: ['Zi_XLOBDo_Y''sOnqjkJTMaA''sOnqjkJTMaA'
  10.     } 
  11. }); 
  12.  
  13. // HTML 
  14. <div id="app"
  15.   <span>{{ videos | at(1) }}</span> 
  16. </div> 
 

 

返回給定列表中的最小值

 

  1. // JS 
  2. Vue.filter('min'function (values) { 
  3.     return Math.min(...values); 
  4. }); 
  5.  
  6. new Vue({ 
  7.     el: '#app'
  8.  
  9.     data: { 
  10.         ages: [23, 19, 45, 12, 32] 
  11.     } 
  12. }); 
  13.  
  14. // HTML 
  15.  
  16. <div id="app"
  17.   <span>{{ ages | min }}</span> 
  18. </div> 
 

 

隨機排列元素列表:

 

  1. Vue.filter('shuffle'function (values) { 
  2.     for (var i = values.length - 1; i > 0; i--) { 
  3.         var j = Math.floor(Math.random() * (i + 1)); 
  4.         var temp = values[i]; 
  5.         values[i] = values[j]; 
  6.         values[j] = temp
  7.     } 
  8.     return values
  9. }); 
  10.  
  11. new Vue({ 
  12.     el: '#app'
  13.  
  14.     data: { 
  15.         cards: ['Lahire''Judith''Lancelot''Alexandre'
  16.     } 
  17. }); 
  18.  
  19. // HTML 
  20.  
  21. <div id="app"
  22.   <span>{{ cards | shuffle }}</span> 
  23. </div> 
 

 

返回數組的第一個元素:

 

  1. Vue.filter('first'function (values) { 
  2.     if(Array.isArray(values)) { 
  3.         return values[0]; 
  4.     } 
  5.     return values
  6. }); 
  7.  
  8. new Vue({ 
  9.     el: '#app'
  10.  
  11.     data: { 
  12.         consoles: ['PlayStation''Nintendo DS''Xbox''Atari'
  13.     } 
  14. }); 
  15.  
  16. // HTML 
  17. <div id="app"
  18.   <span>{{ consoles | first }}</span> 
  19. </div> 
 

 

返回數組的最后一個元素

 

  1. Vue.filter('last'function (values) { 
  2.     if(Array.isArray(values)) { 
  3.         return values[values.length - 1]; 
  4.     } 
  5.     return values
  6. }); 
  7.  
  8. new Vue({ 
  9.     el: '#app'
  10.  
  11.     data: { 
  12.         consoles: ['PlayStation''Nintendo DS''Xbox''Atari'
  13.     } 
  14. }); 
  15.  
  16. // HTML 
  17. <div id="app"
  18.   <span>{{ consoles | last }}</span> 
  19. </div> 
 

 

返回過濾指定元素的數組的副本

 

  1. Vue.filter('without'function (values, exclude) { 
  2.     return values.filter(function(element) { 
  3.         return !exclude.includes(element); 
  4.     }); 
  5. }); 
  6.  
  7. new Vue({ 
  8.     el: '#app'
  9.  
  10.     data: { 
  11.         unpaidInvoices: ['#1001''#1002''#1003''#1004'
  12.     } 
  13. }); 
  14.  
  15. // HTML 
  16. <div id="app"
  17.   <span>{{ unpaidInvoices | without('#1003') }}</span> 
  18. </div> 
 

 

刪除數組中重復的元素

 

  1. Vue.filter('unique'function (valuesunique) { 
  2.     return values.filter(function(element, index, self) { 
  3.         return index == self.indexOf(element); 
  4.     }); 
  5. }); 
  6.  
  7. new Vue({ 
  8.     el: '#app'
  9.  
  10.     data: { 
  11.         recentViewedPosts: [13, 43, 23, 13, 43, 3, 98, 42, 65] 
  12.     } 
  13. }); 
  14.  
  15. // HTML 
  16.  
  17. <div id="app"
  18.   <span>{{ recentViewedPosts | unique }}</span> 
  19. </div> 
 

 

在字符串后加上文本

 

  1. Vue.filter('prepend'function (string, prepend) { 
  2.     return `${string}${prepend}`; 
  3. }); 
  4.  
  5. new Vue({ 
  6.     el: '#app'
  7.  
  8.     data: { 
  9.         greeting: 'Hello' 
  10.     } 
  11. }); 
  12.  
  13. // HTML 
  14. <div id="app"
  15.   <span>{{ greeting | prepend(' World!') }}</span> 
  16. </div> 
 

 

重復一個字符串n次

 

  1. Vue.filter('repeat'function (string, times) { 
  2.     return string.repeat(times); 
  3. }); 
  4.  
  5. new Vue({ 
  6.     el: '#app'
  7.  
  8.     data: { 
  9.         greeting: 'Hello' 
  10.     } 
  11. }); 
  12.  
  13. // HTML 
  14.  
  15. <div id="app"
  16.   <span>{{ greeting | repeat(3) }}</span> 
  17. </div> 
 

 

總結

希望讀者們從這篇文章中能學到了一些東西,現在知道如何創建和使用過濾器,最重要的是,你現在可以重構你的代碼,用過濾器來清理它。

責任編輯:華軒 來源: 今日頭條
相關推薦

2020-06-18 08:44:09

過濾器Vue JS

2009-07-08 17:33:37

Servlet過濾器

2009-09-25 15:19:44

Hibernate過濾

2021-07-05 15:22:03

Servlet過濾器客戶端

2023-08-14 13:33:25

2024-01-05 09:04:35

隆過濾器數據結構哈希函數

2014-03-13 14:17:10

大數據

2024-11-04 08:45:48

布隆過濾器元數據指紋值

2009-07-08 15:30:56

Servlet過濾器

2009-07-14 09:09:08

Swing模型過濾器

2009-07-08 16:07:04

Servlet過濾器配

2009-09-29 13:55:23

Hibernate設置

2011-06-29 16:14:59

Qt 事件 過濾器

2025-04-21 00:50:50

2009-06-18 10:13:00

Hibernate過濾

2022-10-11 23:14:39

模態循環過濾器代碼

2017-07-18 14:10:31

大數據Apache Flum過濾器

2023-07-24 08:00:56

客戶端訪問指定

2020-10-29 07:16:26

布隆過濾器場景

2024-03-15 11:21:22

布隆過濾器數據庫數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av在线免费观看网址 | 青青草网站在线观看 | 久久精品视频在线观看 | 91精品国产91久久综合桃花 | 91福利电影在线观看 | 中文字幕视频在线免费 | 久久久美女 | 欧美一级片免费看 | 亚洲日韩中文字幕一区 | 亚洲国产精品一区二区三区 | 国产区在线免费观看 | 久久亚洲综合 | 亚洲成人中文字幕 | 99精品国产一区二区三区 | 亚洲男人的天堂网站 | 久久国产精品久久久久久久久久 | 武道仙尊动漫在线观看 | 欧美一级视频在线观看 | 久久视频精品 | 日韩在线一区二区三区 | 久久久久久国产精品三区 | 在线观看毛片网站 | 国产精品久久久久久吹潮 | 日韩视频中文字幕 | 亚洲成人av| 久久大香 | 精品久久99 | 人人做人人澡人人爽欧美 | 欧美日韩一二三区 | 一区二区日韩 | 久久国产精品视频观看 | 婷婷在线免费 | 亚洲免费观看视频 | 日韩一区二区三区在线播放 | 日韩视频在线免费观看 | 成人深夜福利 | 黄色免费三级 | 久久精品亚洲一区 | 中文字幕av一区二区三区 | 影音先锋久久 | 日韩一级精品视频在线观看 |