vue - 定义和使用过滤器filter

一、过滤器的介绍

1、在Vue中使用过滤器(Filters)来渲染数据是一种很有趣的方式。

2、首先我们要知道,Vue中的过滤器不能替代Vue中的mehtods、computed、watch

3、过滤器不改变真正的data,而只是改变渲染的结果,并返回过滤后的版本。

4、在很多不同的情况下,过滤器都是有用的,比如尽可能保持API响应的干净,并在前端处理数据的格式。

5、在你希望避免重复和连接的情况下,它们也可以有效地封装成可重用代码块背后的所有逻辑。

6、在Vue 2.0中已经没有内置的过滤器了,我们可以自定义过滤器。

二、定义和使用过滤器

使用Vue,可以有两种不同的方式注册过滤器(全局过滤器和本地过滤器),你可以跨所有组件访问全局过滤器,而本地过滤器只允许你在其定义的组件内部使用。注意:当全局过滤器和局部过滤器重名时,会采用局部过滤器。

【1】全局过滤器

来看一个简单的示例,其作用是将单词第一个字母转成大写字母

    // 声明一个全局的过滤器
    Vue.filter('capitalize', function (value) {
        if (!value) return ''
        value = value.toString()
        return value.charAt(0).toUpperCase() + value.slice(1)
    })

【2】本地过滤器

本地过滤器存储在Vue组件中,作为filters属性中的函数。这个时候你想注册多少个就能注册多少个

filters: {
    capitalize: function (value) {
        if (!value) return ''
        value = value.toString()
        return value.charAt(0).toUpperCase() + value.slice(1)
    }
}

【3】过滤器的使用

过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。

过滤器函数总接收表达式的值 作为第一个参数。在下述例子中,capitalize过滤器函数将会收到name的值作为第一个参数,formaId过滤器函数将会收到rowId的值作为第一个参数。

<!-- 在双花括号中 -->
<h1>{{ name | capitalize }}</h1>

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rowId | formatId"></div>

【4】hello通过capitalize过滤器后展示到页面的是Hello

三、过滤器串联

过滤器可以串联,使用管道(|)符号将多个过滤器进行串连,并通过这一系列过滤器转换成一个值。

在下面这个例子中,表达式name的值将作为参数传入到filterA函数中。然后继续调用过滤器函数filterB,将filterA的过滤结果作为参数传递到filterB中,最终得到过滤后的结果展示到h1标签元素

<h1>{{ name | filterA | filterB }}</h1>

让我们再看一个价格的例子,并让这个价格只保留两位小数,然后加上美元符号。

<div id="app">
    <h1>{{ price | toFixed(2) | toUSD}}</h1>
</div>

// 过滤器
filters: {
    toFixed: function (price, limit) {
        return price.toFixed(limit)
    },
    toUSD: function (price) {
        return `$${price}`
    }
}

四、添加参数

正如前面提到过的,过滤器可以根据你需要添加一些参数进来。Vue将被过滤的值作为第一个参数,后缀作为第二个和第三个参数。

下述例子中,toFixed 被定义为接收两个参数的过滤器函数。其中price的值作为第一个参数,limit作为第二个参数

<div id="app">
    <h1>{{ price | toFixed(2) }}</h1>
</div>

// 过滤器
filters: {
    toFixed: function (price, limit) {
        return price.toFixed(limit)
    },
}

文章每周持续更新,可以微信搜索「 前端大集锦 」第一时间阅读,回复【视频】【书籍】领取200G视频资料和30本PDF书籍资料

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。