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

通過(guò)事例講解如果在 Vue 創(chuàng)建及使用過(guò)濾器

開(kāi)發(fā) 前端
與 AngularJS 類似,Vue.js 也有自己的數(shù)據(jù)轉(zhuǎn)換和過(guò)濾方法,但是必須記住,過(guò)濾器并不改變?cè)紨?shù)據(jù),它們只改變輸出并返回過(guò)濾后的數(shù)據(jù)。

 與 AngularJS 類似,Vue.js 也有自己的數(shù)據(jù)轉(zhuǎn)換和過(guò)濾方法,但是必須記住,過(guò)濾器并不改變?cè)紨?shù)據(jù),它們只改變輸出并返回過(guò)濾后的數(shù)據(jù)。過(guò)濾器在很多不同的情況下都很有用,比如保持API響應(yīng)盡可能干凈,在前端處理數(shù)據(jù)的格式。希望通過(guò)將所有邏輯封裝在可重用代碼塊之后來(lái)避免重復(fù)和連接的情況下,它們同樣非常有效。

[[330521]]

定義和使用過(guò)濾器

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

過(guò)濾器是簡(jiǎn)單的 JS 函數(shù),它們將要轉(zhuǎn)換的值作為第一個(gè)參數(shù),但是也可以傳入盡可能多的其他參數(shù)來(lái)返回該值的格式化版本。

全局過(guò)濾器

全局過(guò)濾器如下所示:

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

過(guò)濾器定義必須始終在主Vue實(shí)例之上,否則會(huì)得到一個(gè)Failed to resolve filter: toUSD錯(cuò)誤。

  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> 

本地過(guò)濾器

本地過(guò)濾器注冊(cè)到一個(gè)Vue組件作用域中,來(lái)看看如何創(chuàng)建:

  1. // 在此示例中,我們將創(chuàng)建一個(gè)過(guò)濾器,將字符串變成大寫。 
  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> 

如上面的示例中看到的那樣,本地過(guò)濾器作為“filters”屬性內(nèi)的函數(shù)存儲(chǔ)在Vue組件中。我們可以注冊(cè)任意多個(gè):

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

附加參數(shù)設(shè)置

正如我們?cè)诒疚囊灾兴岬降?,過(guò)濾器可以根據(jù)需要接受任意多個(gè)參數(shù)

  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> 

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

鏈?zhǔn)竭^(guò)濾器

關(guān)于過(guò)濾器,我最喜歡的一點(diǎn)是能夠使用管道(|)符號(hào)將它們鏈接起來(lái),并通過(guò)一系列轉(zhuǎn)換器運(yùn)行單個(gè)值。再舉一個(gè)價(jià)格的例子,我們想限制價(jià)格的小數(shù)位以及加價(jià)格的單位。

  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> 

示例

接下來(lái),我們通過(guò)一些事例來(lái)鞏固一下。

將 JS 值轉(zhuǎn)換為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> 

從對(duì)象數(shù)組中提取屬性值列表

  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> 

隨機(jī)排列元素列表:

  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> 

返回?cái)?shù)組的第一個(gè)元素:

  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> 

返回?cái)?shù)組的最后一個(gè)元素

  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> 

返回過(guò)濾指定元素的數(shù)組的副本

  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> 

刪除數(shù)組中重復(fù)的元素

  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> 

重復(fù)一個(gè)字符串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> 

總結(jié)

希望讀者們從這篇文章中能學(xué)到了一些東西,現(xiàn)在知道如何創(chuàng)建和使用過(guò)濾器,最重要的是,你現(xiàn)在可以重構(gòu)你的代碼,用過(guò)濾器來(lái)清理它。

本文轉(zhuǎn)載自微信公眾號(hào)「大遷世界」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系大遷世界公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 大遷世界
相關(guān)推薦

2020-06-19 07:51:07

vue開(kāi)發(fā)數(shù)據(jù)

2009-07-08 17:33:37

Servlet過(guò)濾器

2009-09-25 15:19:44

Hibernate過(guò)濾

2023-08-14 13:33:25

2021-07-05 15:22:03

Servlet過(guò)濾器客戶端

2024-01-05 09:04:35

隆過(guò)濾器數(shù)據(jù)結(jié)構(gòu)哈希函數(shù)

2014-03-13 14:17:10

大數(shù)據(jù)

2024-11-04 08:45:48

布隆過(guò)濾器元數(shù)據(jù)指紋值

2009-07-08 15:30:56

Servlet過(guò)濾器

2009-07-08 16:07:04

Servlet過(guò)濾器配

2009-09-29 13:55:23

Hibernate設(shè)置

2011-06-29 16:14:59

Qt 事件 過(guò)濾器

2009-07-14 09:09:08

Swing模型過(guò)濾器

2022-10-11 23:14:39

模態(tài)循環(huán)過(guò)濾器代碼

2025-04-21 00:50:50

2009-06-18 10:13:00

Hibernate過(guò)濾

2017-07-18 14:10:31

大數(shù)據(jù)Apache Flum過(guò)濾器

2023-07-24 08:00:56

客戶端訪問(wèn)指定

2020-10-29 07:16:26

布隆過(guò)濾器場(chǎng)景

2024-03-15 11:21:22

布隆過(guò)濾器數(shù)據(jù)庫(kù)數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 色婷婷激情综合 | 国产农村妇女精品一区 | 欧美在线a | 91精品久久久久久久久久 | 黄网站免费在线观看 | 天天爽夜夜爽精品视频婷婷 | 久久成人人人人精品欧 | 精品国产乱码久久久久久久久 | 欧美精品一区二区三区蜜桃视频 | 欧美日韩不卡合集视频 | 亚州综合在线 | 日韩中文在线观看 | 久久久久久国 | 亚洲激情一区二区三区 | 国产精品亚洲一区二区三区在线 | 午夜精品在线观看 | 成人午夜在线视频 | 久久激情五月丁香伊人 | 精品久久久久香蕉网 | 欧美一级片在线 | 欧美一区二区三区久久精品 | 亚洲精品久久久久久首妖 | 国产精品国色综合久久 | caoporn视频在线 | 国产精品久久久久久久久免费 | av网站在线看 | 日韩精品福利 | 色永久 | 五月天婷婷激情 | 成人在线国产 | 国产精品乱码一区二三区小蝌蚪 | 国产激情片在线观看 | 久久久久久久一区 | 久99久视频 | 欧美久久天堂 | 超碰精品在线 | 中文字幕在线看人 | 99精品免费视频 | 亚洲日韩视频 | 亚洲高清一区二区三区 | 国产伦精品一区二区三区四区视频 |