视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vue 内置过滤器的使用总结(附加自定义过滤器)
2020-11-27 22:02:38 责编:小采
文档


前言

vue中过滤器filters的作用是什么?

过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。Vue有很多很便利的过滤器,可以参考官方文档。

能够帮我们处理快速一些数据的格式----format数据格式化处理。

语法也很简单

{{ message | Filter }}
  • message: 要格式化的数据
  • Filter: 对数据格式化的方法
  • 链式过滤

    VueJs允许你链式调用过滤器,简单的来说,就是一个过滤器的输出成为下一个过滤器的输入,然后再次过滤。接下来,我们可以想象一个比较简答的例子,使用了Vue的 filterBy + orderBy 过滤器来过滤所有商品products。过滤出来的产品是属于电器类商品,并且按电器字母排序。

    filterBy过滤器 : 过滤器的值必须是一个数组,filterBy + 过滤条件。过滤条件是:‘string || function' + in ‘optionKeyName'

    orderBy过滤器 : 过滤器的值必须是一个数组,orderBy + 过滤条件。过滤条件是:‘string || array ||function' + ‘order ≥ 0 为升序 || order < 0 为降序'

    接下来,我们可以看下第二个例子:我们有一个商品数组products,我们希望遍历这个数组,并把他们打印成一张清单,这个用v-for很容易实现。

    <li v-for="product in products">
     {{ product.name | capitalize }} - {{ product.price | currency }}
    </li>

    capitalize过滤器 : 将输入的字符串首字母转换成大写字母的过滤器。currency过滤器 : 将输入的数字转换成现金的过滤器。可以跟上货币符号(默认$)和保留的小数位(默认2)。

    利用上面的两个过滤器,能够很好的把一个json数组的商品清单格式化成通熟易懂的商品价格清单。

    如果只想要电器类商品,可以在v-for上加过滤条件:

    <li v-for="product in products | filterBy 'electronics' in 'category' ">
     {{ product.name | capitalize }} - {{ product.price | currency }}
    </li>
    

    上面的例子,就是用filterBy 过滤在 'category'中含有'electronics' 关键字的列表,返回的列表就是只含有 'electronics' 关键字的列表。

    如果想要多个搜索条件:

    <li v-for="product in products | filterBy 'electronics' in 'category' 'name' ">
     {{ product.name | capitalize }} - {{ product.price | currency }}
    </li>

    上面的例子,就是用filterBy 过滤在 'category' 和 'name' 中含有'electronics' 关键字的列表。

    最后我们还需要将这个列表用字母进行排序。我们可以在 filterBy 过滤器的基础上,链式调用orderBy 过滤器。

    <ul>
     <li v-for="product in products
     | filterBy 'electronics' in 'category'
     | orderBy 'name' "
     >
     {{ product.name | capitalize }} - {{ product.price | currency }}
     </li>
    </ul>

    orderBy 的排序方式默认是升序,如果想要降序,只需要加一个小于0的参数:

    <li v-for="product in products
     | filterBy 'electronics' in 'category'
     | orderBy 'name' -1 "
    >
    

    下面看看vue自带过滤器有哪些,并附带小示例。最后记得看看如果自定义过滤器哦!

    vue自带的过滤器

    capitalize(首字母大写)

    <div class="test">
     {{message | capitalize}}
    </div>
    
    <script type="text/javascript">
    var myVue = new Vue({
     el: ".test",
     data: {
     message: "javan"
     }
    })
    </script>
    
    

    上面代码输出:Javan

    uppercase(全部大写)

    // 初始message:abc
    
    {{message | uppercase}}
    
    // 上面代码
    输出:ABC

    lowercase(全部小写)

    // 初始message:ABC
    
    {{message | lowercase}}
    
    // 上面代码
    输出:abc

    currency(输出金钱以及小数点)

    <div class="test">
     {{message | currency}} // 
    输出$520.13 {{message | currency '¥' "2"}} //输出 $520.13 </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", data: { message: "520.1314" } }) </script>

    第一个参数 {String} [货币符号] - 默认值: '$'
    第二个参数 {Number} [小数位] - 默认值: 2

    pluralize(变复数)

    如果只有一个参数,复数形式只是简单地在末尾添加一个 “s”。如果有多个参数,参数被当作一个字符串数组,对应一个、两个、三个…复数词。如果值的个数多于参数的个数,多出的使用最后一个参数。

    <div class="test">
     {{message}} {{message | pluralize 'item'}} 
    输出: 1 item <ul v-for="item in lili"> <li> {{item}} {{item | pluralize 'item'}} 输出: 1 item 2 items 3 items </li> </ul> <ul v-for="item in lili"> <li> {{item}} {{item | pluralize 'st' 'rd'}} 输出: 1 st 2 rd 3 rd </li> </ul> <ul v-for="item in man"> <li> {{item}} {{item | pluralize 'item'}} 输出: 1 item 2 items 3 items </li> </ul> <ul v-for="item in man"> <li> {{item}} {{item | pluralize 'st' 'rd'}} 输出: 1 st 2 rd 3 rd </li> </ul> </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", data: { message: 1, lili: [1,2,3], man: { name1: 1, name2: 2, name3: 3 } } }) </script>

    debounce(事件延时)

    1) : 需在@里面使用
    2) 参数:{Number} [wait] - 默认值: 300
    3) 功能:包装处理器,让它延迟执行 x ms, 默认延迟 300ms。包装后的处理器在调用之后至少将延迟 x ms, 如果在延迟结束前再次调用,延迟时长重置为 x ms。

    <div class="test">
     <button id="btn" @click="doSomeThing | debounce 10000">点击我</button>
    </div>
    <script type="text/javascript">
     var myVue = new Vue({
     el: ".test",
     methods: {
     doSomeThing: function () {
     // do something
     }
     }
     })
    </script>
    

    limitBy(排序)

    1) :需在v-for(即数组)里面使用

    第一个参数:{Number} 取得数量

    第二个参数:{Number} 偏移量

    <div class="test">
     <ul v-for="item in lili | limitBy 10">
     <li>{{item}}</li>
     
    输出1 2 3 4 5 6 7 8 9 10 </ul> <ul v-for="item in lili | limitBy 10 3"> <li>{{item}}</li> 输出 4 5 6 7 8 9 10 11 12 13 </ul> </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", data: { lili: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] } }) </script>

    filterBy(过滤)

    1) :需在v-for(即数组)里面使用

    第一个参数: {String | Function} 需要搜索的字符串

    第二个参数: in (可选,指定搜寻位置)

    第三个参数: {String} (可选,数组格式)

    <div class="test">
     <ul v-for="item in lili | filterBy 'o' ">
     <li>{{item}}</li>
     
    输出oi oa lo ouo oala </ul> <ul v-for="item in man | filterBy 'l' in 'name' "> <li>{{item.name}}</li> 输出lily lucy </ul> <ul v-for="item in man | filterBy 'l' in 'name' 'dada' "> <li>{{item.name+"+"+item.dada}}</li> 输出lily+undefined lucy+undefined undefined+lsh </ul> </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", data: { lili: ["oi", "oa", "ll", "lo" ,"ouo" ,"kk" ,"oala"], man: [ //此处注意man是数组,不是对象 {name: "lily"}, {name: "lucy"}, {name: "oo"}, {dada: "lsh"}, {dada: "ofg"} ] } }) </script>

    orderBy(排序)

    1) :需在v-for(即数组)里面使用

    第一个参数: {String | Array | Function} 需要搜索的字符串

    第二个参数: {String} 可选参数 order 决定结果升序(order >= 0)或降序(order < 0),默认是升序

    <div class="test">
     遍历数组
     <ul v-for="item in lili | orderBy 'o' 1">
     <li>{{item}}</li>
     
    输出kk ll oi </ul> <ul v-for="item in lili | orderBy 'o' -1"> <li>{{item}}</li> 输出oi ll kk </ul> 遍历含对象的数组 <ul v-for="item in man | orderBy 'name' 1"> <li>{{item.name}}</li> 输出Bruce Chuck Jackie </ul> <ul v-for="item in man | orderBy 'name' -1"> <li>{{item.name}}</li> 输出Jackie Chuck Bruce </ul> 使用函数排序 <ul v-for="item in man | orderBy ageByTen"> <li>{{item.name}}</li> 输出Bruce Chuck Jackie </ul> </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", data: { lili: ["oi", "kk", "ll"], man: [ //此处注意man是数组,不是对象 { name: 'Jackie', age: 62 }, { name: 'Chuck', age: 76 }, { name: 'Bruce', age: 61 } ] }, methods: { ageByTen: function () { return 1; } } }) </script>

    自定义过滤器

    <div class="test">
     {{'2018-11-16 18:12:15'|formatDate}}
    </div>
    <script type="text/javascript">
     var myVue = new Vue({
     el: ".test",
     methods: {
     },
     filters:{
     formatDate (val) {
     return moment(val).format('YYYY-MM-DD');
     // 这里用到了moment.js
     }
     }
     })
    </script>

    下载本文
    显示全文
    专题