HuKai's Blog HuKai's Blog
首页
  • Java核心技术

    • Java基础
    • Java并发编程
    • JVM
    • Java新特性
  • Spring生态

    • Spring5
    • SpringMVC
    • SpringBoot
  • 开源框架

    • MyBatis
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
  • 页面样式

    • HTML
    • CSS
  • JavaScript

    • JavaScript基础
    • ECMAScript6教程
    • TypeScript
  • 前端框架

    • Vue
    • Webpack
  • NIO
  • Netty
  • RabbitMQ
  • 技术文档

    • GitHub技巧
    • 博客搭建
    • 技术笔记
  • 优质文章

    • 小技巧
    • 解决方案
GitHub (opens new window)

HuKai

梦想成为全栈的保安
首页
  • Java核心技术

    • Java基础
    • Java并发编程
    • JVM
    • Java新特性
  • Spring生态

    • Spring5
    • SpringMVC
    • SpringBoot
  • 开源框架

    • MyBatis
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
  • 页面样式

    • HTML
    • CSS
  • JavaScript

    • JavaScript基础
    • ECMAScript6教程
    • TypeScript
  • 前端框架

    • Vue
    • Webpack
  • NIO
  • Netty
  • RabbitMQ
  • 技术文档

    • GitHub技巧
    • 博客搭建
    • 技术笔记
  • 优质文章

    • 小技巧
    • 解决方案
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript基础

  • ECMAScript

  • TypeScript

  • Vue

    • Vue基础

      • 初识Vue
      • 模板语法 - 插值语法 - 指令语法
      • 计算属性和监听属性
      • 样式绑定 - class - style
      • 列表渲染v-for
      • 事件处理v-on
      • 表单输入绑定
      • 生命周期钩子
      • 过滤器filter
        • 简单介绍
          • 过滤器可以串联
          • 过滤器是 JavaScript 函数可以接收参数
        • 全局过滤器
        • 应用场景
          • 实际开发使用
          • vue-cli中定义局部过滤器
          • 常见使用场景
      • 常用内置指令
      • 自定义指令
    • Vue组件化编程

    • Vue脚手架

    • Vue插件

  • Webpack

  • 前端
  • Vue
  • Vue基础
HuKai
2022-02-24
目录

过滤器filter

官方文档(Vue3已移除filter):过滤器 — Vue.js (vuejs.org) (opens new window)

# 简单介绍

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

<!-- 在双花括号中 -->
{{ message | filter }}

<!-- 在 `v-bind` 中 -->
<div v-bind:msg="message | filter"></div>
1
2
3
4
5

过滤器函数总接收表达式的值作为第一个参数。 在上述例子中,filter 过滤器函数将会收到 message 的值作为第一个参数。

# 过滤器可以串联

{{ message | filterA | filterB }}
1

在这个例子中,filterA 被定义为接收单个参数的过滤器函数,表达式 message 的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到 filterB 中。

# 过滤器是 JavaScript 函数可以接收参数

{{ message | filterA('arg1', arg2) }}
1

filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。

# 全局过滤器

语法:Vue.filter( filterName,( ) => { return // 数据处理结果 } )

<div id="app">
  <h3>{{userName | addName}}</h3>
</div>
<script>
// 参数一:是过滤器的名字,也就是管道符后边的处理函数;
// 参数二:处理函数,处理函数的参数同上	
Vue.filter("addName",(value)=>{											         
    return "my name is" + value
})
let vm = new Vue({
    el:"#app",
  	data:{
     userName:"小明" 
    }
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 应用场景

# 实际开发使用

  1. 全局过滤器经常会被在数据修饰上,通常我们把处理函数给抽离出去,统一放在一个.js文件中。
// filter.js 文件

let filterPrice = (value) => {
	return '已收款' + value + '元'
}
let filterDate = (value) => {
    return value + '天'
}

export default {filterPrice,filterDate}
1
2
3
4
5
6
7
8
9
10
  1. 在main.js中 导入 上边 filter.js文件 ,也可以在任何组件中导入 filter.js这个文件,但对于全局过滤器来说,最好是在main.js中定义,导入的是一个对象,所以使用Object.keys()方法,得到一个由key组成的数组,遍历数据,让key作为全局过滤器的名字,后边的是key对应的处理函数,这样在任何一个组件中都可以使用全局过滤器了:
//main.js
 
//下边是2种导入方式,推荐第一种
import * as filters from './utils/filter/filter'
// import {filterPrice,filterDate} from './utils/filter/filter'
 
console.log(filters)
 
Object.keys(filters.default).forEach((item)=>{
  Vue.filter(item,filters.default[item])
})
 
new Vue({
  router,
  store,
  render: h => h(App),
}).$mount('#app')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

  1. 在组件中使用全局过滤器
// test.vue

<template>
  <div>
    <input type="text" v-model="filterCount" >
    <div>{{filterCount | filterPrice}}</div>
    <div>{{filterCount | filterDate}}</div>
  </div>  
</template>

<script>
export default {
  data(){
    return {
      filterCount:1500
    }
  },
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# vue-cli中定义局部过滤器

// test.vue

<template>
  <div>
    <input type="text" v-model="filterCount" >
    <div class="filter">{{filterCount | changeCapitalLetter}}</div>
  </div>  
</template>

<script>
export default {
  data(){
    return {
      filterCount:'hello'
    }
  },
  filters:{
    changeCapitalLetter(value){	// value是输入框的内容,也是要显示的内容
      if(value){
        let str = value.toString();
        // 获取英文,以空格分组把字符串转为数组,遍历每一项,第一项转为大写字母
        let newArr = str.split(" ").map(ele=>{
          return ele.charAt(0).toUpperCase() + ele.slice(1)
        });
        return newArr.join(" ")  // 数组转字符串 以空格输出。。。
      }
    }
  },
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 常见使用场景

格式日期(时间) 场景一:后端传的时间:2019-11-19T04:32:46Z 安装moment.js (opens new window)

// main.js

import moment from 'moment'
// 定义全局过滤器--时间格式化
Vue.filter('format',function(val,arg){
  if(!val) return;
  val = val.toString()
  return moment(val).format(arg)
})
1
2
3
4
5
6
7
8
9
// test.vue

<template>
   <div class="filter">{{time | format('YYYY-MM-DD HH:MM:SS')}}</div>  
</template>

<script>
export default {
  data(){
    return {
      time:'2019-11-19T04:32:46Z'
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

编辑 (opens new window)
#Vue
上次更新: 2022/03/20, 11:17:00
生命周期钩子
常用内置指令

← 生命周期钩子 常用内置指令→

最近更新
01
MyBatisPlus
03-20
02
MyBatis源码剖析-延迟加载
03-20
03
MyBatis源码剖析-二级缓存
03-20
更多文章>
Theme by Vdoing | Copyright © 2021-2022 HuKai | 赣ICP备17016768号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式