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 ''// 对数据的操作return value}}
全局过滤器
Vue.filter('capitalize', value => {})
参数
当过滤器形式为 msg | filter 时,filter过滤器接收一个参数,参数为msg。
当过滤器形式为 msg | filter('a')时,filter过滤器接收两个参数,参数为msg, 'a'
过滤器串联
{{ msg | filterA | filterB }}
在这个例子中,filterA的参数为msg,filterB的参数为filterA。
示例
<section id="app">{{ msg | filter-one | filter-two }}</section><script>Vue.filter('filter-one',value=>{return '我是全局过滤器:filter-one'})Vue.filter('filter-two',value=>{return '我是全局过滤器:filter-two'})const vm = new Vue ({el:'#app',data:{msg:213456,},})</script>
练习
首字母大写
<section id="app">{{ msg | capitalize}}</section><script>Vue.filter('capitalize',val => {if(!val) returnreturn val.charAt().toUpperCase() + val.slice(1)})const vm = new Vue({el:'#app',data:{msg:'china'},})</script>
format-money
<section id="app">{{ msg | formatMoney}}</section><script>Vue.filter('formatMoney',val => {if(!val) returnreturn val.toLocaleString('de-DE', { style: 'currency', currency: 'CNY' })})const vm = new Vue({el:'#app',data:{msg: Math.floor(Math.random() * 10000)},})</script>
数字添加文字“万”
<section id="app">{{ msg | addWord}}</section><script>Vue.filter('addWord',val => {if(!val) returnreturn val = val > 10000 ? (val/10000).toFixed(1)+'万':val})const vm = new Vue({el:'#app',data:{msg: Math.floor(Math.random() * 10000000)},})</script>
