温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Vue中怎么创建并使用过滤器

发布时间:2021-07-21 13:46:57 来源:亿速云 阅读:182 作者:Leah 栏目:web开发

Vue中怎么创建并使用过滤器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

定义和使用过滤器

使用 Vue,我们可以通过两种不同的方式注册过滤器:全局和本地。前者方式可以访问所有组件中的过滤器,而后者则只能在定义该组件的组件内部使用过滤器。

过滤器是简单的 JS 函数,它们将要转换的值作为第一个参数,但是也可以传入尽可能多的其他参数来返回该值的格式化版本。

全局过滤器

全局过滤器如下所示:

// 在此示例中,我们将注册一个全局过滤器用来在价格前面添加美元符号:  // 声明 Vue.filter('toUSD', function (value)) {   return `$${value}` } // 使用 <div id="app">   <span>{{ 351.99 | toUSD }}</span> </div>

过滤器定义必须始终在主Vue实例之上,否则会得到一个Failed to resolve filter: toUSD错误。

// DECLARATION Vue.filter('toUSD', function (value) {     return `$${value}`; });  new Vue({     el: '#app',       data: {         price: 351.99     } });  // USAGE <div id="app">   <span>{{ price | toUSD }}</span> </div>

本地过滤器

本地过滤器注册到一个Vue组件作用域中,来看看如何创建:

// 在此示例中,我们将创建一个过滤器,将字符串变成大写。  // 声明 new Vue({     el: '#app',      data: {         name: 'scotch.io'     },      filters: {        // Filter definitions         Upper(value) {             return value.toUpperCase();         }     } });  // 用法 <div id="app">   <span>{{ name | Upper }}</span> </div>

如上面的示例中看到的那样,本地过滤器作为“filters”属性内的函数存储在Vue组件中。我们可以注册任意多个:

...     filters: {         Upper(value) {               return value.toUpperCase();         },         Lower(value) {             return value. toLowerCase();         },     } ....

附加参数设置

正如我们在本文引言中所提到的,过滤器可以根据需要接受任意多个参数

// 声明 Vue.filter('readMore', function (text, length, suffix) {     return text.substring(0, length) + suffix; });  new Vue({     el: '#app',      data: {         text: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non ab modi repellendus labore facere, fugiat ipsam quae accusantium commodi voluptas nesciunt dolor similique ipsum accusamus earum eligendi suscipit laborum quod.'     } });  // 用法 <div id="app">   <span>{{ text | readMore(10, '...') }}</span> </div>

在此示例中,我们创建了一个名称为“readMore”的过滤器,该过滤器会将字符串的长度限制为给定的字符数,并且还会在其中添加所选择的后缀。Vue.js  将要过滤的值作为第一个参数 text 传递,length 和 suffix 作为第二个和第三个参数传递。

链式过滤器

关于过滤器,我最喜欢的一点是能够使用管道(|)符号将它们链接起来,并通过一系列转换器运行单个值。再举一个价格的例子,我们想限制价格的小数位以及加价格的单位。

// JS Vue.filter('toFixed', function (price, limit) {     return price.toFixed(limit); });  Vue.filter('toUSD', function (price) {     return `$${price}`; });  new Vue({     el: '#app',      data: {         price: 435.333     } });  // HTML  <div id="app">   <span>{{ price | toFixed(2) | toUSD }}</span> </div>

示例

接下来,我们通过一些事例来巩固一下。

将 JS 值转换为JSON字符串

// JS Vue.filter('json', function (value) {     return JSON.stringify(value); });  new Vue({     el: '#app',      data: {         user: {             username: 'johndoe',             email: 'john@example.com',             countryCode: 'U.K.'         }     } });   // HTML <div id="app">   <span>{{ user | json }}</span> </div>

从对象数组中提取属性值列表

Vue.filter('pluck', function (objects, key) {     return objects.map(function(object) {          return object[key];     }); });  new Vue({     el: '#app',      data: {         users: [         {             "id": 4,             "first_name": "Eve",             "last_name": "Holt"         },         {             "id": 5,             "first_name": "Charles",             "last_name": "Morris"         },         {             "id": 6,             "first_name": "Tracey",             "last_name": "Ramos"         }         ]     } });   // HTML  <div id="app">   <span>{{ users | pluck('last_name') }}</span> </div>

返回给定索引处的元素

Vue.filter('at', function (value, index) {     return value[index]; });  new Vue({     el: '#app',      data: {         videos: ['Zi_XLOBDo_Y', 'sOnqjkJTMaA', 'sOnqjkJTMaA']     } });  // HTML <div id="app">   <span>{{ videos | at(1) }}</span> </div>

返回给定列表中的最小值

// JS Vue.filter('min', function (values) {     return Math.min(...values); });  new Vue({     el: '#app',      data: {         ages: [23, 19, 45, 12, 32]     } });  // HTML  <div id="app">   <span>{{ ages | min }}</span> </div>

随机排列元素列表:

Vue.filter('shuffle', function (values) {     for (var i = values.length - 1; i > 0; i--) {         var j = Math.floor(Math.random() * (i + 1));         var temp = values[i];         values[i] = values[j];         values[j] = temp;     }     return values; });  new Vue({     el: '#app',      data: {         cards: ['Lahire', 'Judith', 'Lancelot', 'Alexandre']     } });  // HTML  <div id="app">   <span>{{ cards | shuffle }}</span> </div>

返回数组的第一个元素:

Vue.filter('first', function (values) {     if(Array.isArray(values)) {         return values[0];     }     return values; });  new Vue({     el: '#app',      data: {         consoles: ['PlayStation', 'Nintendo DS', 'Xbox', 'Atari']     } });  // HTML <div id="app">   <span>{{ consoles | first }}</span> </div>

返回数组的最后一个元素

Vue.filter('last', function (values) {     if(Array.isArray(values)) {         return values[values.length - 1];     }     return values; });  new Vue({     el: '#app',      data: {         consoles: ['PlayStation', 'Nintendo DS', 'Xbox', 'Atari']     } });  // HTML <div id="app">   <span>{{ consoles | last }}</span> </div>

返回过滤指定元素的数组的副本

Vue.filter('without', function (values, exclude) {     return values.filter(function(element) {         return !exclude.includes(element);     }); });  new Vue({     el: '#app',      data: {         unpaidInvoices: ['#1001', '#1002', '#1003', '#1004']     } });  // HTML <div id="app">   <span>{{ unpaidInvoices | without('#1003') }}</span> </div>

删除数组中重复的元素

Vue.filter('unique', function (values, unique) {     return values.filter(function(element, index, self) {         return index == self.indexOf(element);     }); });  new Vue({     el: '#app',      data: {         recentViewedPosts: [13, 43, 23, 13, 43, 3, 98, 42, 65]     } });  // HTML  <div id="app">   <span>{{ recentViewedPosts | unique }}</span> </div>

在字符串后加上文本

Vue.filter('prepend', function (string, prepend) {     return `${string}${prepend}`; });  new Vue({     el: '#app',      data: {         greeting: 'Hello'     } });  // HTML <div id="app">   <span>{{ greeting | prepend(' World!') }}</span> </div>

重复一个字符串n次

Vue.filter('repeat', function (string, times) {     return string.repeat(times); });  new Vue({     el: '#app',      data: {         greeting: 'Hello'     } });  // HTML  <div id="app">   <span>{{ greeting | repeat(3) }}</span> </div>

关于 Vue中怎么创建并使用过滤器问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue
AI