最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

vue 内置过滤器的使用总结(附加自定义过滤器)

来源:动视网 责编:小采 时间:2020-11-27 22:02:38
文档

vue 内置过滤器的使用总结(附加自定义过滤器)

vue 内置过滤器的使用总结(附加自定义过滤器):前言 vue中过滤器filters的作用是什么? 过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。Vue有很多很便利的过滤器,可以参考官方文档。 能够帮我们处理快速一些数据的格式----format数据格式化处理。 语法也很简单
推荐度:
导读vue 内置过滤器的使用总结(附加自定义过滤器):前言 vue中过滤器filters的作用是什么? 过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。Vue有很多很便利的过滤器,可以参考官方文档。 能够帮我们处理快速一些数据的格式----format数据格式化处理。 语法也很简单


前言

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>

    文档

    vue 内置过滤器的使用总结(附加自定义过滤器)

    vue 内置过滤器的使用总结(附加自定义过滤器):前言 vue中过滤器filters的作用是什么? 过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。Vue有很多很便利的过滤器,可以参考官方文档。 能够帮我们处理快速一些数据的格式----format数据格式化处理。 语法也很简单
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top