vue2基础语法03——过滤器filter

vue2基础语法03——过滤器filter

  • 1. 前言
    • 1.1 需求
    • 1.2 不用过滤器实现
      • 1.2.1 插值语法、计算属性、方法实现
      • 1.2.2 更多关于计算属性 和 方法
  • 2. 使用过滤器实现
    • 2.1 说明
    • 2.2 例子1
    • 2.3 例子2——优化
      • 2.3.1 默认字母不分割
      • 2.3.2 默认字母以@分割
    • 2.4 过滤器使用地方
  • 3. 全局过滤器
  • 4. 过滤器可以串联

1. 前言

1.1 需求

  • 想实现小写字母转大写字母,当然有对应的函数,实现起来很简单,本例只是介绍实现的不同方式,以及如果使用过滤器。

1.2 不用过滤器实现

1.2.1 插值语法、计算属性、方法实现

  • 代码很简单,直接贴,如下:
    在这里插入图片描述
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script type="text/javascript" src="../js/vue.js"></script>
    
        <div id="root">
            <p>原字母:{{ charStr }}</p>
    
            <p>1. 插值语法里表达式-转大写后的字母:{{ charStr.toUpperCase() }}</p>
    
            <p>2. 计算属性computed-转大写后的字母:{{ upStr }}</p>
            
            <p>3. 方法methods-转大写后的字母:{{ upStr2() }}</p>
        </div>
        
        <script>
            const vm = new Vue({
                el: "#root",
                data: {
                    charStr: 'abcde'
                },
                computed: {
                    upStr(){
                        return this.charStr.toUpperCase();
                    }
                },
                methods: {
                    upStr2(){
                        return this.charStr.toUpperCase();
                    }
                },
            })
        </script>
    </body>
    </html>
    

1.2.2 更多关于计算属性 和 方法

  • 请进下面的文章:

    vue2基础语法02——计算属性、方法、侦听器.

2. 使用过滤器实现

2.1 说明

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

    <p>3. 转大写字母,默认字母以@符分割:{{ charStr | upStrUseFilter2 }}</p>
    
    <input type="text" v-bind:value="charStr | upStrUseFilter2">
    
  • 无论传参数或不传参数,过滤器接收到的第一个参数就是管道符前面的表达式的值

  • 参考官网:
    https://v2.cn.vuejs.org/v2/guide/filters.html.

2.2 例子1

  • 如下:
    在这里插入图片描述
    <body>
        <script type="text/javascript" src="../js/vue.js"></script>
    
        <div id="root">
            <p>原字母:{{ charStr }}</p>
    
            <!-- 1. 如果不传参数,过滤器函数将会收到 charStr 的值作为第一个参数 -->
            <p>1. 过滤器-不传参数-转大写后的字母:{{ charStr | upStrUseFilter}}</p>
    
            <!-- 如果传一个或多个参数,其中 charStr 的值作为第一个参数,
                普通字符串 '-' 作为第二个参数,后面如果还有参数依次类推 -->
            <p>2. 过滤器-传参数-转大写后的字母:{{ charStr | upStrUseFilter2("-")}}</p>
    
        </div>
        
        <script>
            const vm = new Vue({
                el: "#root",
                data: {
                    charStr: 'abcde'
                },
                filters: {
                    upStrUseFilter(value){
                        // 过滤器函数将会收到 charStr 的值作为第一个参数
                        return value.toUpperCase();
                    },
                    upStrUseFilter2(value,separator){
                        // 过滤器函数将会收到 charStr 的值作为第一个参数
                        var str = value.toUpperCase();
                        var strArr = str.split('');
                        var result = strArr.join(separator);
                        return result;
                    }
                }
            })
        </script>
    </body>
    

2.3 例子2——优化

2.3.1 默认字母不分割

  • 如下:
    在这里插入图片描述
    <body>
        <script type="text/javascript" src="../js/vue.js"></script>
    
        <div id="root">
            <p>原字母:{{ charStr }}</p>
    
            <!-- 如果传一个或多个参数,其中 charStr 的值作为第一个参数,
                普通字符串 '-' 作为第二个参数,后面如果还有参数依次类推 -->
            <p>1. 转大写字母,且以‘-’分割:{{ charStr | upStrUseFilter2("-") }}</p>
    
            <p>2. 转大写字母,且以‘*’分割:{{ charStr | upStrUseFilter2("*") }}</p>
    
            <p>3. 转大写字母,默认字母不需要分割:{{ charStr | upStrUseFilter2 }}</p>
    
        </div>
        
        <script>
            const vm = new Vue({
                el: "#root",
                data: {
                    charStr: 'abcde'
                },
                filters: {
                    upStrUseFilter2(value,separator){
                        var str = value.toUpperCase();
                        if(!separator){
                            // 如果separator没有值(包括空字符串 和 undefined)
                            return str;
                        }else{
                            var strArr = str.split('');
                            var result = strArr.join(separator);
                            return result;
                        }
                    }
                }
            })
        </script>
    </body>
    

2.3.2 默认字母以@分割

  • 如下:
    在这里插入图片描述

    <body>
        <script type="text/javascript" src="../js/vue.js"></script>
    
        <div id="root">
            <p>原字母:{{ charStr }}</p>
    
            <!-- 如果传一个或多个参数,其中 charStr 的值作为第一个参数,
                普通字符串 '-' 作为第二个参数,后面如果还有参数依次类推 -->
            <p>1. 转大写字母,且以‘-’分割:{{ charStr | upStrUseFilter2("-") }}</p>
    
            <p>2. 转大写字母,且以‘*’分割:{{ charStr | upStrUseFilter2("*") }}</p>
    
            <p>3. 转大写字母,默认字母以@符分割:{{ charStr | upStrUseFilter2 }}</p>
    
        </div>
        
        <script>
            const vm = new Vue({
                el: "#root",
                data: {
                    charStr: 'abcde'
                },
                filters: {
                    upStrUseFilter2(value,separator="@"){
                        var str = value.toUpperCase();
                        var strArr = str.split('');
                        var result = strArr.join(separator);
                        return result;
                    }
                }
            })
        </script>
    </body>
    

2.4 过滤器使用地方

  • 过滤器可以用在两个地方:双花括号插值v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示,上面例子都是插值语法里,写在v-bind 表达式 里,如下:
    <input type="text" v-bind:value="charStr | upStrUseFilter2">
    
    在这里插入图片描述

3. 全局过滤器

  • 全局过滤器:在创建 Vue 实例之前全局定义过滤器。
    当全局过滤器和局部过滤器重名时,会采用局部过滤器。
  • 全局过滤器例子如下:
    <body>
        <script type="text/javascript" src="../js/vue.js"></script>
    
        <div id="root">
            <p>原字母:{{ charStr }}</p>
    
            <!-- 如果传一个或多个参数,其中 charStr 的值作为第一个参数,
                普通字符串 '-' 作为第二个参数,后面如果还有参数依次类推 -->
            <p>1. 转大写字母,且以‘-’分割:{{ charStr | upStrUseFilter2("-") }}</p>
    
            <p>2. 转大写字母,且以‘*’分割:{{ charStr | upStrUseFilter2("*") }}</p>
    
            <p>3. 转大写字母,默认字母以@符分割:{{ charStr | upStrUseFilter2 }}</p>
    
            <input type="text" v-bind:value="charStr | upStrUseFilter2">
    
        </div>
        
        <script>
    
            // 在创建 Vue 实例之前定义全局过滤器
            Vue.filter('upStrUseFilter2',function(value,separator="@"){
                var str = value.toUpperCase();
                var strArr = str.split('');
                var result = strArr.join(separator);
                return result;
            })
    
            const vm = new Vue({
                el: "#root",
                data: {
                    charStr: 'abcde'
                }
            })
        </script>
    </body>
    

4. 过滤器可以串联

  • 语法如下:
    • 语法:
      {{ charStr | filterA | filterB }}
      
    • 解释:
      filterA 被定义为接收单个参数的过滤器函数,表达式 charStr 的值将作为参数传入到filterA函数中。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到 filterB 中
      当然 filterA 和 filterB 也都可以接收多个参数。
  • 下面举个例子,第一个过滤器是转大小写的过滤器,第二个过滤器是将字符串以指定的分隔符分割的过滤器(就是将我们上面例子中的一个过滤器拆成2个)。如下:
    在这里插入图片描述
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script type="text/javascript" src="../js/vue.js"></script>
    
        <div id="root">
            <p>原字母:{{ charStr }}</p>
    
            <!-- 将过滤器 upStrUseFilterA 的结果传递到 过滤器separatorStrUseFilterB 中 -->
            <p>1. 转大写字母,且以‘-’分割:{{ charStr | upStrUseFilterA | separatorStrUseFilterB("-") }}</p>
    
            <p>2. 转大写字母,且以‘*’分割:{{ charStr | upStrUseFilterA | separatorStrUseFilterB("*") }}</p>
    
            <p>3. 转大写字母,默认字母以@符分割:{{ charStr | upStrUseFilterA | separatorStrUseFilterB }}</p>
    
        </div>
        
        <script>
    
            // 1. 将字母转大写的过滤器
            Vue.filter('upStrUseFilterA',function(value){
                var upStr = value.toUpperCase();
                return upStr;
            });
    
            //2. 将字符串分割的过滤器
            Vue.filter('separatorStrUseFilterB',function(value,separator="@"){
                var strArr = value.split('');
                var result = strArr.join(separator);
                return result;
            });
    
    
            const vm = new Vue({
                el: "#root",
                data: {
                    charStr: 'abcde'
                }
            })
        </script>
    </body>
    </html>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/628302.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++智能指针之唯一指针(std::unique_ptr)

1 概述 从C11开始C语言越来向现代化语言转变。尤其是智能指针的引入&#xff0c;代码中不会直接使用new/delete了。C11智能指针有三种分别是&#xff1a;shared_ptr&#xff0c;weak_ptr 和unique_ptr 。 2 唯一指针(unique_ptr) unique_ptr是C11引入的&#xff0c;用来管理指…

上位机图像处理和嵌入式模块部署(树莓派4b安装dockerros1、ros2)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们讨论过树莓派4b安装ros的问题&#xff0c;当时的解决方案就是利用docker来安装ros。我们都知道&#xff0c;每一个ros版本都是和特定的ubu…

mysql权限体系

提示&#xff1a;根据课程视频总结知识点------2024.05.15 文章目录 权限处理逻辑1、 能不能连接2、能不能执行操作 权限授予与回收1、创建用户2、授予权限3、查看权限4、回收权限5、 权限级别 账户安全管理1、用户权限设定原则2、历史文件泄密 用户权限设定原则1. 只读用户--数…

C++|树形关联式容器(set、map、multiset、multimap)介绍使用

目录 一、关联式容器介绍 1.1概念 1.2键值对 1.3树形结构的关联式容器 1.3.1pair模板介绍 1.3.2make_pair的介绍 二、set的介绍和使用 2.1set介绍 2.2set使用 2.2.1构造 2.2.2容量 2.2.3修改 三、map的介绍和使用 3.1map介绍 3.2map使用 3.2.1构造 3.2.2容量 …

VC++6.0 Sqlite3调用例子

1,为什么要使用Sqlite3? SQLite 是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。 2,为什么使用SQLite version 3.8.4.3 2014-04-03 16:53:12的版本…

邮件发送API的功能有哪些?API的调用限制?

邮件发送API的响应速度如何&#xff1f;如何选择API发送邮件&#xff1f; 邮件发送API提供了高效、灵活且可靠的邮件发送功能&#xff0c;使得邮件营销、用户通知、系统告警等场景变得轻松自如。那么&#xff0c;邮件发送API具体都有哪些功能呢&#xff1f;让AokSend来探索吧&…

Spark SQL ---结构化数据文件处理

DataFrame概述 DataFrame的创建 创建DataFrame的两种基本方式&#xff1a; •已存在的RDD调用toDF()方法转换得到DataFrame。 •通过Spark读取数据源直接创建DataFrame。 若使用SparkSession方式创建DataFrame&#xff0c;可以使用spark.read从不同类型的文件中加载数据创建…

【美团面试2024/05/14】前端面试题滑动窗口

一、题目描述 设有一字符串序列 s&#xff0c;确定该序列中最长的无重复字母的子序列&#xff0c;并返回其长度。 备注 0 < s.length < 5 * 104 s 由英文字母、数字、符号和空格组成 示例1 输入 s "abcabcbb" 输出 3 二、原题链接 这道题在LeetCode上的原题链…

运维别卷系列 - 云原生监控平台 之 06.prometheus pushgateway 实践

文章目录 [toc]Pushgateway 简介Pushgateway 部署创建 svc创建 deployment Pushgateway 测试删除 Pushgateway 上对应 lable 的数据 Pushgateway 简介 WHEN TO USE THE PUSHGATEWAY Pushgateway 是一种中介服务&#xff0c;允许您从无法抓取的作业中推送指标。 The Pushgateway…

Python NumPy数组的创建方法

Numpy是Python中科学计算的基础包&#xff0c;其核心对象就是ndarray&#xff08;n维数组&#xff09;。利用数组可以快速执行逻辑&#xff0c;形状操作&#xff0c;统计和傅里叶变换等运算&#xff0c;其效率比Python原生的数组效率更高。因此使用Numpy的第一件事就是创建Nump…

构建第一个ArkTS应用之@LazyForEach:数据懒加载

LazyForEach从提供的数据源中按需迭代数据&#xff0c;并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach&#xff0c;框架会根据滚动容器可视区域按需创建组件&#xff0c;当组件滑出可视区域外时&#xff0c;框架会进行组件销毁回收以降低内存占用。 接口…

线性/非线性最小二乘 与 牛顿/高斯牛顿/LM 原理及算法

最小二乘分为线性最小二乘和非线性最小二乘 最小二乘目标函数都是min ||f(x)||2 若f(x) ax b&#xff0c;就是线性最小二乘&#xff1b;若f(x) ax2 b / ax2 bx 之类的&#xff0c;就是非线性最小二乘&#xff1b; 1. 求解线性最小二乘 【参考】 2. 求解非线性最小二乘…

玩转大模型 企业AI着陆新正解 神州问学AI原生赋能平台正式发布

在人工智能技术日新月异的今天&#xff0c;神州数码凭借深厚的行业洞察和技术积累&#xff0c;揭开了AI原生赋能平台——神州问学的神秘面纱。作为企业AI着陆的加速引擎&#xff0c;神州问学致力于通过AI原生场景赋能&#xff0c;为企业开辟一条通往智能未来的坦途。 神州问学—…

出国旅游常用英语,柯桥成人英语培训

Where can I catch a taxi?哪里我可以叫到出租车&#xff1f; The taxi zone is right on the left corner over there.出租车站台就在左边转角处。 Are you free?您有空吗&#xff1f; Sure. Where are you going?当然。您要去哪里&#xff1f; Drive me back to Santa …

2024年淘宝京东天猫618红包领取跨店满减优惠券活动时间是从什么时候开始到几月几号结束?

2024年淘宝、天猫、京东618红包领取口令及活动时间已发布&#xff0c;具体如下&#xff1a; 一、2024年淘宝天猫618活动 1.1、2024年淘宝天猫618活动时间 2024年5月20日开始持续到6月20日结束&#xff1b; 1.2、2024年淘宝天猫618红包领取 在活动时间内&#xff0c;每天都可…

如何通过radsystem源代码启动项目

大家有没有想过这样一个问题&#xff0c;如果别人没有下载radsystems&#xff0c;别人该如何打开我们的项目呢&#xff0c;那么今天我来介绍一下&#xff0c;如何启动radsystem源代码。 一般来说我们都是需要打开radsystems的publish部署项目 但是我们可以通过它部署后的源代码…

内存函数:memcpy(拷贝),memmove(拷贝),memcmp(比较),memset(设置)

内存函数 一.memcpy&#xff08;内存拷贝1&#xff09;1.函数使用2.模拟实现 二.memmove&#xff08;内存拷贝2&#xff09;1.函数使用2.模拟实现 三.memcmp&#xff08;内存比较&#xff09;1.函数使用2.模拟实现 四.memset&#xff08;内存设置&#xff09;1.函数使用2.模拟实…

axios封装 手动取消接口请求

axios封装 手动取消接口请求 1.创建clearHttpRequest.js文件2.封装的axios文件中使用3.vue文件中引入4. 路由切换使用 对于一些接口loading很久&#xff0c;用户想手动终止请求的需求&#xff0c; 并为了节约性能&#xff0c;当路由切换时&#xff0c;cancel掉还没有结束的接口…

Redis经典问题:BigKey问题

大家好,我是小米,今天来和大家聊聊Redis中的一个经典问题:BigKey问题。在互联网系统中,我们经常需要保存大量的用户数据,比如用户的个人信息、粉丝列表、发表的微博内容等等。这些数据往往会被存储在Redis这样的缓存系统中,以提高系统的性能和响应速度。但是,在处理这些…

算法考试题

分治法课堂案例 第1关&#xff1a;二分搜索技术 任务描述 本关任务&#xff1a;给定一组有序整数&#xff0c;用二分查找技术查找X是否在序列中&#xff0c;在则输出Yes&#xff0c;不在则输出No。 输入格式&#xff1a;三行&#xff0c;第一行一个整数n&#xff0c;第二行…