先上一段代码:
<div class="test">
<p>{{msg | sum}}</p>
<p>{{msg | cal 10 20}}</p> <!--过滤器函数始终以表达式的值作为第一个参数。带引号的参数视为字符串,而不带引号的参数按表达式计算。-->
<p>{{msg | sum | currency }}</p> <!--添加两个过滤器,注意不要冲突-->
<input type="text" v-model="msg | change"> <!--用户从input输入的数据在回传到model之前也可以先处理-->
</div>
<script type="text/javascript">
Vue.filter("change", {
read: function (value) { // model -> view 在更新 `<input>` 元素之前格式化值
return value;
},
write: function (newVal,oldVal) { // view -> model 在写回数据之前格式化值
console.log("newVal:"+newVal);
console.log("oldVal:"+oldVal);
return newVal;
}
});
var myVue = new Vue({
el: ".test",
data: {
msg:12
},
filters: {
sum: function (value) {
return value + 4;
},
cal: function (value, begin, xing) {
return value + begin + xing;
}
}
});
</script>
=================================================================================
注册在全局的fliter
(1)全局方法 Vue.filter() 注册一个自定义过滤器,必须放在Vue实例化前面
(2) 过滤器函数始终以表达式的值作为第一个参数。带引号的参数视为字符串,而不带引号的参数按表达式计算
(3)可以设置两个过滤器参数,前提是这两个过滤器处理的不冲突
(4)用户从input输入的数据在回传到model之前也可以先处理
(5)filter是默认会传入当前的item,而且filter的第一个参数默认就是当前的item。
注册在实例化内部
仅在使用它的实例里面注册
1.在html中使用
{{ msg | filter('arg1','arg2') }}
// msg对应函数中的第一个参数data,arg1为第二个参数,类推
过滤器可以串联:
{{ msg | filterA | filterB}}
2.methods中使用,并传参
methods:{
fn(){
let filter = this.$options.filters['filter']
let data = filter(this.msg,arg1,arg2)
}
}
3.在v-html中使用filters
<p v-html="$options.filters.filter(this.msg,arg1,arg2)"></p>