Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:
示例:

  1. <!-- 在双花括号中 -->
  2. {{ message | capitalize }}
  3. <!-- `v-bind` -->
  4. <div v-bind:id="rawId | formatId"></div>

局部过滤器

  1. filters: {
  2. capitalize: function (value) {
  3. if (!value) return ''
  4. // 对数据的操作
  5. return value
  6. }
  7. }

全局过滤器

  1. Vue.filter('capitalize', value => {})

参数

当过滤器形式为 msg | filter 时,filter过滤器接收一个参数,参数为msg
当过滤器形式为 msg | filter('a')时,filter过滤器接收两个参数,参数为msg, 'a'

过滤器串联

  1. {{ msg | filterA | filterB }}

在这个例子中,filterA的参数为msg,filterB的参数为filterA。
示例

  1. <section id="app">
  2. {{ msg | filter-one | filter-two }}
  3. </section>
  4. <script>
  5. Vue.filter('filter-one',value=>{
  6. return '我是全局过滤器:filter-one'
  7. })
  8. Vue.filter('filter-two',value=>{
  9. return '我是全局过滤器:filter-two'
  10. })
  11. const vm = new Vue ({
  12. el:'#app',
  13. data:{
  14. msg:213456,
  15. },
  16. })
  17. </script>

最终输出为
image.png

练习

首字母大写

  1. <section id="app">
  2. {{ msg | capitalize}}
  3. </section>
  4. <script>
  5. Vue.filter('capitalize',val => {
  6. if(!val) return
  7. return val.charAt().toUpperCase() + val.slice(1)
  8. })
  9. const vm = new Vue({
  10. el:'#app',
  11. data:{
  12. msg:'china'
  13. },
  14. })
  15. </script>

format-money

  1. <section id="app">
  2. {{ msg | formatMoney}}
  3. </section>
  4. <script>
  5. Vue.filter('formatMoney',val => {
  6. if(!val) return
  7. return val.toLocaleString('de-DE', { style: 'currency', currency: 'CNY' })
  8. })
  9. const vm = new Vue({
  10. el:'#app',
  11. data:{
  12. msg: Math.floor(Math.random() * 10000)
  13. },
  14. })
  15. </script>

数字添加文字“万”

  1. <section id="app">
  2. {{ msg | addWord}}
  3. </section>
  4. <script>
  5. Vue.filter('addWord',val => {
  6. if(!val) return
  7. return val = val > 10000 ? (val/10000).toFixed(1)+'万':val
  8. })
  9. const vm = new Vue({
  10. el:'#app',
  11. data:{
  12. msg: Math.floor(Math.random() * 10000000)
  13. },
  14. })
  15. </script>