当前位置: 首页 > 科技观察

举例说明如何在Vue中创建和使用过滤器_0

时间:2023-03-13 04:02:57 科技观察

与AngularJS类似,Vue.js也有自己的数据转换和过滤方法,但必须记住,过滤器不会改变原始数据,它们只会改变输出并在数据之后返回过滤器。过滤器在很多不同的情况下都很有用,比如保持API响应尽可能干净,以及在前端操纵数据格式。在您希望通过将所有逻辑封装在可重用代码块后面来避免重复和链接的情况下,它们也非常有效。定义和使用过滤器在Vue中,我们可以通过两种不同的方式注册过滤器:全局和本地。前一种方法可以访问所有组件中的过滤器,而后者只能使用定义组件的组件内部的过滤器。过滤器是简单的JS函数,它将要转换的值作为第一个参数,但也可以传入尽可能多的其他参数,因为它们希望返回该值的格式化版本。全局过滤器全局过滤器看起来像这样://在这个例子中,我们将注册一个全局过滤器以在价格前加上美元符号://DeclareVue.filter('toUSD',function(value)){return`$${value}`}//使用{{351.99|toUSD}}

过滤器定义必须始终在主Vue实例之上,否则会Geta解析过滤器失败:toUSD错误。//DECLARATIONVue.filter('toUSD',function(value){return`$${value}`;});newVue({el:'#app',data:{price:351.99}});//用法{{price|toUSD}}
Localfilter本地过滤器注册在一个Vue组件范围内,让我们看看如何在这里创建它://这里在在这个例子中,我们将创建一个过滤器来将字符串大写。//声明newVue({el:'#app',data:{name:'scotch.io'},filters:{//FilterdefinitionsUpper(value){returnvalue.toUpperCase();}}});//用法{{name|Upper}}
如上例所示,本地过滤器作为“filters”属性中的函数存储在Vue组件中。我们可以注册任意数量的:...filters:{Upper(value){returnvalue.toUpperCase();},Lower(value){returnvalue.toLowerCase();},}....其他参数设置为我们在本文的介绍中提到,过滤器可以根据需要接受任意多的参数//declareVue.filter('readMore',function(text,length,suffix){returntext.substring(0,length)+suffix;});newVue({el:'#app',data:{text:'Loremipsumdolorsitamet,consecteturadipisicingelit.Nonabmodirepellenduslaborefacere,fugiatipsamquaeaccusantiumcommodivoluptasnesciuntdolorsimiliqueipsumaccusamusearumegendisuscipitlaborumquod.'}});//用法app,'>
在此示例中,我们创建了一个名为“readMore”的过滤器,它将字符串的长度限制为给定的字符,并为其添加选择的后缀。Vue.js将值作为第一个参数文本传递给过滤器,将长度和后缀作为第二和第三个参数传递。链式过滤器关于过滤器,我最喜欢的事情之一是能够使用竖线(|)符号将它们链接起来,并通过转换器链运行单个值。再举一个价格的例子,我们要限制价格的小数位数和加价的单位。//JSVue.filter('toFixed',function(price,limit){returnprice.toFixed(limit);});Vue.filter('toUSD',function(price){return`$${price}`;});newVue({el:'#app',data:{price:435.333}});//HTML{{price|toFixed(2)|toUSD}}Example接下来,我们用一些例子来巩固一下。将JS值转换为JSON字符串//JSVue.filter('json',function(value){returnJSON.stringify(value);});newVue({el:'#app',data:{user:{username:'johndoe',email:'john@example.com',countryCode:'U.K.'}}});//HTML{{user|json}}从对象数组中提取属性值列表Vue.filter('pluck',function(objects,key){returnobjects.map(function(object){returnobject[key];});});newVue({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{{users|pluck('last_name')}}返回给定索引处的元素Vue.filter('at',function(value,index){returnvalue[index];});newVue({el:'#app',data:{videos:['Zi_XLOBDo_Y','sOnqjkJTMaA','sOnqjkJTMaA']}});//HTML{{videos|at(1)}}返回给定列表中的最小值//JSVue.filter('min',function(values){returnMath.min(...values);});newVue({el:'#app',data:{ages:[23,19,45,12,32]}});//HTML{{ages|min}}打乱元素列表:Vue.filter('shuffle',function(values){for(vari=values.length-1;i>0;i--){varj=Math.floor(Math.random()*(i+1));vartemp=values[i];values[i]=values[j];values[j]=temp;}returnvalues;});newVue({el:'#app',data:{cards:['Lahire','Judith','Lancelot','Alexandre']}});//HTML{{cards|shuffle}}返回数组的第一个元素:Vue.filter('first',function(values){if(Array.isArray(values)){returnvalues[0];}returnvalues;});newVue({el:'#app',data:{consoles:['PlayStation','NintendoDS','Xbox','Atari']}});//HTML{{consoles|first}}返回数组的最后一个元素Vue.filter('last',function(values){if(Array.isArray(values)){returnvalues[values.length-1];}returnvalues;});newVue({el:'#app',data:{consoles:['PlayStation','NintendoDS','Xbox','Atari']}});//HTML{{consoles|last}}返回过滤器specification元素数组的副本Vue.filter('without',function(values,exclude){returnvalues.filter(function(element){return!exclude.includes(element);});});newVue({el:'#app',data:{unpaidInvoices:['#1001','#1002','#1003','#1004']}});//HTML{{unpaidInvoices|without('#1003')}}删除数组中重复的元素Vue.filter('unique',function(values,unique){returnvalues.filter(function(element,index,self){returnindex==self.indexOf(element);});});newVue({el:'#app',data:{recentViewedPosts:[13,43,23,13,43,3,98,42,65]}});//HTML{{recentViewedPosts|unique}}在字符串后添加文本Vue.filter('prepend',函数(字符串,前置){返回n`${string}${prepend}`;});newVue({el:'#app',data:{greeting:'Hello'}});//HTML{{greeting|prepend('World!')}}重复一个字符串n次Vue.filter('repeat',function(string,times){returnstring.repeat(times);});newVue({el:'#app',data:{greeting:'Hello'}});//HTML{{greeting|repeat(3)}}总结我希望读者从这篇文章中学到了一些东西,现在知道如何创建和使用过滤器,最重要的是,您现在可以重构您的代码以使用过滤器清理它