vue 内置过滤器的使用总结(附加自定义过滤器)
前言
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 内置过滤器的使用总结(附加自定义过滤器) 的全部内容, 来源链接: utcz.com/z/342134.html