如何在Vue中定义和调用过滤器?

过滤器(Filters)是 vue 为开发者提供的功能,常用于文本的格式化。过滤器可以用在两个地方:插值表达式和 v-bind 属性绑定。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道符”进行调用,示例代码如下:

<l--在双花括号中通过“管道符“调用capitalize过滤器,对message的值进行格式化-->
<p>{{ message | capitalize }}</p>

<!--在v-bind 中通过“管道符”调用 formatId过滤器,对rawId的值进行格式化-->
<div v-bind:id="rawId| formatId"></div>

在创建 vue 实例期间,可以在 filters 节点中定义过滤器,示例代码如下:

const vm = new Vue({
    el: '#app',
    data: {
        message: 'hello vue. js',
        info: 'title info'
    },
    filters: { // 在 filters 节点下定义“过滤器”
        capitalize(str) { //把首字母转为大写的过滤器
            return str.charAt(0).toUpperCase() + str.slice(1)
        }
    }
})

在 filters 节点下定义的过滤器,称为“私有过滤器”,因为它只能在当前 vm 实例所控制的 el 区域内使用。

如果希望在多个 vue 实例之间共享过滤器,则可以按照如下的格式定义全局过滤器:

// 全局过滤器-独立于每个vm实例之外
// Vue.filter()方法接收两个参数:
//     第 1 个参数,是全局过滤器的“名字“
//     第 2 个参数,是全局过滤器的“处理函数“
Vue.filter('capitalize', (str) => {
  return str.charAt(0).toUpperCase() + str.slice(1)
})

过滤器可以串联地进行调用,例如:

<!--把 message的值,交给filterA 进行处理-->
<!--把filterA处理的结果,再交给filterB进行处理-->
<!--最终把filterB处理的结果,作为最终的值渲染到页面上-->
{{ message | filterA | filterB }}

连续调用多个过滤器的示例代码如下:

<!--串联调用多个过滤器-->
<p>{{text | capitalize | maxLength)}</p>

//全局过滤器-首字母大写
Vue.filter('capitalize', (str) => {
  return str.charAt(0).tolpperCase() + str.slice(1) + '--'
})

//全局过滤器 - 控制文本的最大长度
Vue.filter('maxLength', (str) => {
if (str.length <= 10) return str
return str.slice(0, 11) +'…'
}

过滤器的本质是 JavaScript 函数,因此可以接收参数,格式如下:

<!-- arg1和 arg2 是传递给 filterA 的参数-->
<p>{{ message | filterA(arg1, arg2) }}</p>

//过滤器处理函数的形参列表中:
//  第一个参数:永远都是”管道符“前面待处理的值
//  从第二个参数开始,才是调用过滤器时传递过来的arg1和arg2参数
Vue.filter('filterA',(msg, arg1, arg2) =>{
  //过滤器的代码逻辑...
}

过滤器传参,示例代码如下:

<!--调用 maxlength 过滤器时传参-->
<p>{{text | capitalize | maxLength(5)}}</p>

//全局过滤器 - 首字母大写
Vue.filter('capitalize',(str) => {
return str.charAt(0).toUpperCase() + str.slice(1) + '~~'
})

//全局过滤器-控制文本的最大长度
Vue.filter('maxLength', (str, len = 10) => {
  if (str.length A len) return str
  return str.slice(0, len) +'…
}

过滤器的兼容性

过滤器仅在 vue 2.x 和 1.x 中受支持,在 vue 3.x 的版本中剔除了过滤器相关的功能。

在企业级项目开发中:

⚫ 如果使用的是 2.x 版本的 vue,则依然可以使用过滤器相关的功能

⚫ 如果项目已经升级到了 3.x 版本的 vue,官方建议使用计算属性或方法代替被剔除的过滤器功能

具体的迁移指南,请参考 vue 3.x 的官方文档给出的说明:

https://v3.vuejs.org/guide/migration/filters.html#migration-strategy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是对你提出的前端Vue面试题的回答: 1. Vue.js是一款流行的JavaScript框架,用于构建用户界面。Vue.js的特点是简单易学、灵活性强、性能高、可组合性好等。 2. Vue.js的双向数据绑定是通过使用数据劫持和发布/订阅模式实现的。当数据发生变化时,Vue.js会自动更新视图,反之亦然。 3. Vue.js的生命周期钩子函数有8个,分别是beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy和destroyed。它们分别在不同的时刻被调用,用于执行一些特定的操作。 4. Vue组件是Vue.js应用程序的可重用代码块。通过定义一个Vue组件,可以将其作为一个独立的模块来使用。Vue组件通常包括模板、样式和逻辑等内容。 5. Vue.js的指令是一种用于向DOM元素添加特殊行为的语法。常用的指令有v-if、v-show、v-for、v-bind和v-on等等。 6. Vue.js的路由是用于管理Vue应用程序页面之间导航的方式。可以通过Vue Router插件来实现路由功能。 7. Vue.js过滤器是一种用于格式化文本的功能。可以通过定义一个过滤器来将数据进行格式化并渲染到HTML。 8. Vue.js的计算属性是一种用于动态计算Vue组件的属性值的方式,与方法不同的是,计算属性具有缓存和依赖检测的特点。 9. 在Vue.js,可以通过Vue.directive()方法来定义定义指令。自定义指令通常用于扩展Vue.js的功能。 10. Vue.js的单文件组件是一种将模板、样式和逻辑封装在一个文件的方式,以便于组件的管理和维护。可以通过Vue CLI工具来创建和使用单文件组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值