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>
相关推荐
LuckyLay16 分钟前
Vue百日学习计划Day9-15天详细计划-Gemini版
前端·vue.js·学习
weifont4 小时前
聊一聊Electron中Chromium多进程架构
javascript·架构·electron
大得3694 小时前
electron结合vue,直接访问静态文件如何跳转访问路径
javascript·vue.js·electron
水银嘻嘻6 小时前
12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建
运维·前端·自动化
it_remember6 小时前
新建一个reactnative 0.72.0的项目
javascript·react native·react.js
小嘟嚷ovo7 小时前
h5,原生html,echarts关系网实现
前端·html·echarts
十一吖i7 小时前
Vue3项目使用ElDrawer后select方法不生效
前端
只可远观7 小时前
Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件
前端·flutter
周胡杰7 小时前
组件导航 (HMRouter)+flutter项目搭建-混合开发+分栏效果
前端·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
敲代码的小吉米7 小时前
前端上传el-upload、原生input本地文件pdf格式(纯前端预览本地文件不走后端接口)
前端·javascript·pdf·状态模式