VueJs(13)---過濾器


過濾器

 

過濾器

     1、過濾器規則

       Vue.js 允許你自定義過濾器,可被用於一些常見的文本格式化。過濾器可以用在兩個地方:

      雙花括號插值和 v-bind 表達式 (后者從 2.1.0+ 開始支持)。過濾器應該被添加在 JavaScript 表達式的尾部,由“管道”符號指示:

<!-- 在雙花括號中 -->
{{ message | capitalize }}

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

     你可以在一個組件的選項中定義本地的過濾器:

filters: {
  capitalize: function (value) {
    if (!value) return ''
    value = value.toString()
    return value.charAt(0).toUpperCase() + value.slice(1)
  }
}

 或者在創建 Vue 實例之前全局定義過濾器:

Vue.filter('capitalize', function (value) {
  if (!value) return ''
  value = value.toString()
  return value.charAt(0).toUpperCase() + value.slice(1)
})

new Vue({
  // ...
})

下面這個例子用到了 capitalize 過濾器:發現首字母大寫

capitalize 過濾器函數將會收到 message 的值作為第一個參數。

 

2、過濾器可以串聯:

{{ message | filterA | filterB }}

這就相當於:

   第一步:先把message放到filterA過濾器中進行過濾

   第二步:將第一步過濾器的結果再放到filterB再進行過濾,顯示最終過濾結果。

 

3、過濾器是 JavaScript 函數,因此可以接收參數:

{{ message | filterA('arg1', arg2) }}

 這里,filterA 被定義為接收三個參數的過濾器函數。其中 message 的值作為第一個參數,普通字符串 'arg1' 作為第二個參數,表達式 arg2 的值作為第三個參數。

小案例

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="app">
    <span>SearchByName: </span>
    <input v-model="searchQuery">
    <table>
        <thead>
            <tr>
                <td v-for="col in columns">{{col|capitalize}}</td>
            </tr>
        </thead>
        <tbody>
            <tr v-for="entry in filteredData">
                <td v-for="col in columns">{{entry[col]}}</td>
            </tr>
        </tbody>
    </table>
</div>

<script>
    new Vue({
        el: '#app',
        data: {
            searchQuery: '',
            columns: ['name', 'gender', 'age'],
            data: [{
                name: 'Jack',
                gender: 'male',
                age: 26
            }, {
                name: 'John',
                gender: 'female',
                age: 20
            }, {
                name: 'Lucy',
                gender: 'female',
                age: 16
            }]
        },
        filters: {
            capitalize: function(value) {
                return value.charAt(0).toUpperCase() + value.slice(1);
            }
        },
        computed: {
            filteredData: function() {
                var self = this;
//filter是Javascript帶的方法,
// 前面調用的是需要使用filter的數組類型,而給filter函數傳入的是數組中的每個item,也就是說filter里面的函數,是每個item要去做的,並將每個結果返回。
return this.data.filter(function(item) { return item.name.toLowerCase().indexOf(self.searchQuery.toLowerCase()) !== -1; }) } } }); </script>

效果:

   使用js中的迭代函數filter :

其他的一些Js 迭代方法——filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()

 

參考:

鏈接:vue filter的幾種用法

 

想太多,做太少,中間的落差就是煩惱。想沒有煩惱,要么別想,要么多做。上尉【2】

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM