程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Vue2

    • Vue简介
    • Vue 基础使用
    • Vue的基础指令
    • 过滤器(Filters)
      • 过滤器(Filters)
        • 1. 定义私有过滤器
        • 2. 全局过滤器
        • 3. 连续调用多个过滤器
        • 4. 过滤器传参
        • 5. 过滤器的兼容性
        • 6. 综合示例
    • 侦听器(Watch)
    • 计算属性(computed)
    • vue-cli
    • vue.config.js配置
    • Vue组件
    • 生命周期和数据共享
    • Vue 组件实例与数据代理 (this)
    • $refs 引用
    • 动态组件
    • 插槽 (Slots)
    • 混入 (Mixin)
    • 自定义指令 (directives)
    • 插件 (Plugins)
    • 初识Vue-router
    • Vue-router的常见用法
  • Vue3

  • vue3 + TS 项目集成

  • Vue全家桶
  • Vue2
scholar
2024-07-30
目录

过滤器(Filters)

# 过滤器(Filters)

过滤器(Filters)是 Vue 提供的功能,主要用于文本的格式化。过滤器可以用在两个地方:插值表达式和 v-bind 属性绑定。

过滤器添加在 JavaScript 表达式的尾部,由“管道符”进行调用。 下面是一个简单的示例:

<!-- 插值表达式中使用过滤器,将 message 转换为大写 -->
{{ message | capitalize }}

<!-- v-bind 属性绑定中使用过滤器,将 rawId 格式化为特定格式 -->
<div v-bind:id="rawId | formatId"></div>
1
2
3
4
5

# 1. 定义私有过滤器

在创建 Vue 实例期间,可以在 filters 节点中定义过滤器。在 filters 节点下定义的过滤器称为“私有过滤器”,它只能在当前 Vue 实例所控制的 DOM 区域内使用,示例如下:








 







new Vue({
  el: '#app', // 绑定 Vue 实例的根元素
  data: {
    message: 'hello world' // 定义一个 message 数据
  },
  filters: {
    // 定义一个过滤器 'capitalize',将字符串的首字母大写
    capitalize: function (value) {
      if (!value) return '' // 如果 value 为空,则返回空字符串
      value = value.toString() // 将 value 转换为字符串
      return value.charAt(0).toUpperCase() + value.slice(1) // 将首字母大写并拼接剩余字符串
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14

上面代码定义了一个 Vue 实例,包含一个名为 capitalize 的过滤器,用于将字符串的首字母大写。过滤器的 value 参数接收的是绑定数据的值,例如上例中的 message。

# 2. 全局过滤器

如果希望在多个 Vue 实例之间共享过滤器,可以定义全局过滤器:在 Vue.js 中,全局过滤器是通过 Vue.filter 方法定义的,可以在任何 Vue 实例中使用。语法格式如下:

Vue.filter('filterName', function (value) {
  // 对传入的 value 进行处理
  return processedValue
})
1
2
3
4
  • filterName:过滤器的名称,在模板中使用时以 | filterName 形式调用。
  • value:传入过滤器的值。
  • processedValue:过滤器处理后的返回值。

示例如下:


 




















// 定义一个全局过滤器 'reverse',将字符串反转
Vue.filter('reverse', function (value) {
  if (!value) return '' // 如果 value 为空,则返回空字符串
  return value.split('').reverse().join('') // 将字符串反转
})

// 创建第一个 Vue 实例
new Vue({
  el: '#app1', // 绑定 Vue 实例的根元素
  data: {
    message: 'hello' // 定义一个 message 数据
  }
})

// 创建第二个 Vue 实例
new Vue({
  el: '#app2', // 绑定 Vue 实例的根元素
  data: {
    message: 'world' // 定义一个 message 数据
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

上面代码定义了一个全局过滤器 reverse,可以在所有 Vue 实例中使用。全局过滤器函数的第一个参数 value 接收的是绑定数据的值,例如上例中的 message。

# 3. 连续调用多个过滤器

过滤器可以串联使用,多个过滤器之间用管道符 | 连接。示例如下:

<!-- 先将 message 转换为大写,再将字符串反转 -->
{{ message | capitalize | reverse }}
1
2

具体代码如下:








 





 






new Vue({
  el: '#app', // 绑定 Vue 实例的根元素
  data: {
    message: 'hello' // 定义一个 message 数据
  },
  filters: {
    // 定义一个过滤器 'capitalize',将字符串的首字母大写
    capitalize: function (value) {
      if (!value) return '' // 如果 value 为空,则返回空字符串
      value = value.toString() // 将 value 转换为字符串
      return value.charAt(0).toUpperCase() + value.slice(1) // 将首字母大写并拼接剩余字符串
    },
    // 定义一个过滤器 'reverse',将字符串反转
    reverse: function (value) {
      if (!value) return '' // 如果 value 为空,则返回空字符串
      return value.split('').reverse().join('') // 将字符串反转
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 4. 过滤器传参

过滤器本质上是 JavaScript 函数,可以接收参数。传参格式如下:

<!-- 调用 slice 过滤器,并传递参数 0 和 5 -->
{{ message | slice(0, 5) }}
1
2

示例代码如下:








 






new Vue({
  el: '#app', // 绑定 Vue 实例的根元素
  data: {
    message: 'hello world' // 定义一个 message 数据
  },
  filters: {
    // 定义一个过滤器 'slice',截取字符串的部分内容
    slice: function (value, start, end) {
      if (!value) return '' // 如果 value 为空,则返回空字符串
      return value.slice(start, end) // 截取字符串从 start 到 end 的部分
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13

在模板中使用该过滤器:

<!-- 使用 slice 过滤器截取字符串的前五个字符 -->
{{ message | slice(0, 5) }}
1
2

上面代码先应用 capitalize 过滤器将首字母大写,然后使用 slice 过滤器截取字符串的前五个字符。

# 5. 过滤器的兼容性

过滤器仅在 Vue 2.x 和 1.x 中受支持,在 Vue 3.x 版本中剔除了过滤器相关的功能。在企业级项目开发中:

  • 如果使用的是 2.x 版本的 Vue,则依然可以使用过滤器功能。
  • 如果项目已经升级到了 3.x 版本的 Vue,官方建议使用计算属性或方法代替被剔除的过滤器功能。

具体的迁移指南,请参考 Vue 3.x 的官方文档 (opens new window)给出的说明。

# 6. 综合示例








 





 






new Vue({
  el: '#app', // 绑定 Vue 实例的根元素
  data: {
    message: 'hello world' // 定义一个 message 数据
  },
  filters: {
    // 定义一个过滤器 'capitalize',将字符串的首字母大写
    capitalize: function (value) {
      if (!value) return '' // 如果 value 为空,则返回空字符串
      value = value.toString() // 将 value 转换为字符串
      return value.charAt(0).toUpperCase() + value.slice(1) // 将首字母大写并拼接剩余字符串
    },
    // 定义一个过滤器 'slice',截取字符串的部分内容
    slice: function (value, start, end) {
      if (!value) return '' // 如果 value 为空,则返回空字符串
      return value.slice(start, end) // 截取字符串从 start 到 end 的部分
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

在模板中使用该过滤器:

<!-- 插值表达式中使用过滤器,先将首字母大写,再截取前五个字符 -->
{{ message | capitalize | slice(0, 5) }}
1
2

上面代码先应用 capitalize 过滤器将首字母大写,然后使用 slice 过滤器截取字符串的前五个字符。

编辑此页 (opens new window)
上次更新: 2025/01/30, 23:55:43
Vue的基础指令
侦听器(Watch)

← Vue的基础指令 侦听器(Watch)→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式