Vue3 之 过滤器

1、过滤器简介

1.1、全局过滤器与局部过滤器

过滤器本质上是一个函数,与自定义指令类似。

全局过滤器

复制代码
Vue.filter(id, [definition])

局部过滤器

复制代码
new Vue({
  el: '#app',
  filters: {
      definition(value): {
          ...
          }
      }
  })

案例:将字符串首字母转换为大写字母的全局过滤器

复制代码
Vue.filter('capitalize', function (value) {
        if (!value) return '';
        value = value.toString();
        return value.charAt(0).toUpperCase() + value.slice(1);
    })

如果换成局部过滤器

复制代码
let vm = new Vue({
    el: '#app',
    data: { // 参数定义,字典形式
    },
    computed: { // 计算属性,多次调用,只计算一次
    },
    methods: { // 普通方法,多次调用,多次计算
    },
    filters: { // 过滤器
        capitalize(value) {
            if (!value) return '';
            value = value.toString();
            return value.charAt(0).toUpperCase() + value.slice(1);
        }
    }
})

注意:

  1. 当全局过滤器和局部过滤器重名,会采用局部过滤器
  2. 与自定义命令一样,全局过滤器可以在任何 Vue 实例的模板中使用,而局部过滤器只能在该实例绑定的视图中使用

过滤器可以使用在两个地方:

双花括号:{{ 变量 | 过滤器 }}

v-bind 表达式:v-bind:href="变量 | 过滤器"

2、过滤器的参数

过滤器函数总是接收表达式的值作为第一个参数,过滤器本质上是一个 JS 函数,自然可以接收多个参数。

不建议把过滤器功能做的很复杂,这违背了过滤器的设计初衷,比如:Vue.filter('format', function (value, ...params) {...})

实例:为表达式的值添加前后缀的过滤器

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
 
<body>
<div id="app">
    <h2>过滤器</h2>
    <!-- 输出:vue-filters.js -->
    <p>{{ filename | format('vue', suffix) }}</p>
</div>
 
<script src="VueJs/vue.js"></script>
<script>
    Vue.filter('format', function (value, prefix, suffix) {
        if (!value) return '';
        value = value.toString();
        return prefix + "-" + value + "." + suffix;
    })
    let vm = new Vue({
        el: '#app',
        data: {
            filename: 'filters',
            suffix: 'js'
        },
        computed: { // 计算属性,多次调用,只计算一次
        },
        methods: { // 普通方法,多次调用,多次计算
        },
        filters: { // 过滤器
        }
    })
</script>
</body>
</html>

3、过滤器的串联

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .profile {}
    </style>
</head>
 
<body>
<div id="app">
    <h2>过滤器</h2>
    <!--  输出结果:DLROW OLLEH  -->
    <p>{{ message | uppercase | reverse }}</p>
</div>
 
<script src="VueJs/vue.js"></script>
<script>
    Vue.filter('uppercase', function (value) {
        if (!value) return '';
        value = value.toString();
        return value.toUpperCase();
    })
 
    Vue.filter('reverse', function (value) {
        if (!value) return '';
        value = value.toString();
        return value.split('').reverse().join('');
    })
 
    let vm = new Vue({
        el: '#app',
        data: {
            message: 'hello world'
        },
        computed: { // 计算属性,多次调用,只计算一次
        },
        methods: { // 普通方法,多次调用,多次计算
        },
        filters: { // 局部过滤器
        }
    })
</script>
</body>
</html>
相关推荐
tzy2331 分钟前
AI 对话的流式输出详解——不止于SSE
javascript·ai·llm·sse·readablestream
挖稀泥的工人3 分钟前
能够插入 DOM 的输入框
前端·javascript·vue.js
xiaotao1316 分钟前
第十五章:企业级部署方案
前端·vite·前端打包
weixin_408099677 分钟前
【实战教程】懒人精灵如何实现 OCR 文字识别?接口调用完整指南(附可运行示例)
java·前端·人工智能·后端·ocr·api·懒人精灵
没有故事、有酒10 分钟前
Vue2中el-table修改表头高度和行高
javascript·vue.js·elementui
把csdn当日记本的菜鸡12 分钟前
Vue3 响应式 API 简单学习
javascript·vue.js·学习
小李子呢021115 分钟前
前端八股5---组件通信
前端·javascript·vue.js
Daemon16 分钟前
AI Agent系列记录(第二篇)
前端·人工智能·后端
JianZhen✓16 分钟前
2026——Cursor全攻略+AI编程/前端辅助工具汇总(含问题速解)
前端·ai编程
vmiao18 分钟前
【JS进阶】模拟正确处理并渲染后台数据
前端·javascript