去年,也就是2020年9月份,vue3出来了。增长了不少新功能,可是也删掉了一些功能。好比删掉了vue2中的过滤器filter功能。与此同时,官方建议:用方法调用或计算属性替换过滤器。
vue
过滤器能够通俗理解成是一个特殊的方法,用来加工数据的express
详细请看官方文档
笔者认为:缘由就是vue3要精简代码,而且filter功能重复,filter能实现的功能,methods和计算属性基本上也能够实现。因此就干脆把filter这方面的vue源码给删掉,这样的话,更加方便维护。后端
假设咱们有一个快递信息,后端返回给咱们的并非具体的状态值,而是对应的字符串1 2 3 4 5 6等,不一样的状态有着一套对应规则,好比状态为1是待发货等,具体效果图和状态对应关系以下图:app
<template> <div id="app"> <ul v-for="(item, index) in arr" :key="index"> <li>快递公司:{{ item.deliverCompany }}</li> <li>运输状态:{{ item.expressState }}</li> </ul> </div> </template> <script> export default { data() { return { arr: [ { deliverCompany: "京东快递", expressState: "1", }, { deliverCompany: "顺丰快递", expressState: "2", }, { deliverCompany: "中通快递", expressState: "3", }, { deliverCompany: "邮政快递", expressState: "4", }, { deliverCompany: "极兔快递", expressState: "5", }, { deliverCompany: "某某快递", expressState: null, }, ], }; }, }; </script>
这里咱们就不用全局filter了,使用组件内部的filter
<template> <div id="app"> <ul v-for="(item, index) in arr" :key="index"> <li>快递公司:{{ item.deliverCompany }}</li> <!-- 使用过滤器语法 --> <li>运输状态:{{ item.expressState | showState }}</li> </ul> </div> </template> <script> export default { // data ...... 篇幅有限直接省略掉 // 在组件内定义,而后根据不一样的状态返回不一样的值内容 filters: { showState(state) { switch (state) { case "1": return "待发货"; break; case "2": return "已发货"; break; case "3": return "运输中"; break; case "4": return "派件中"; break; case "5": return "已收货"; break; default: return "快递信息丢失"; break; } }, }, }; </script>
<template> <div id="app"> <ul v-for="(item, index) in arr" :key="index"> <li>快递公司:{{ item.deliverCompany }}</li> <!-- 使用计算属性 --> <li>运输状态:{{ computedText(item.expressState) }}</li> </ul> </div> </template> <script> export default { // data ...... 篇幅有限直接省略掉 computed: { computedText() { // 计算属性要return一个函数接收参数 return function (state) { switch (state) { case "1": return "待发货"; break; case "2": return "已发货"; break; case "3": return "运输中"; break; case "4": return "派件中"; break; case "5": return "已收货"; break; default: return "快递信息丢失"; break; } }; }, }, }; </script>
<template> <div id="app"> <ul v-for="(item, index) in arr" :key="index"> <li>快递公司:{{ item.deliverCompany }}</li> <!-- 使用方法 --> <li>运输状态:{{ methodsText(item.expressState) }}</li> </ul> </div> </template> <script> export default { // data ...... 篇幅有限直接省略掉 methods: { methodsText(state) { switch (state) { case "1": return "待发货"; break; case "2": return "已发货"; break; case "3": return "运输中"; break; case "4": return "派件中"; break; case "5": return "已收货"; break; default: return "快递信息丢失"; break; } }, }, }; </script>
看到了叭,filter过滤器能加工数据,computed计算属性和methods方法也均可以加工数据,这样的话,就重复了...
vue3删除了filter就比如:
员工filter会干的活,员工computed和员工methods也会干,并且比员工filter干得多,干的好。这样的话,老板vue就把filter开除了,filter就被fired了。毕竟多一个员工,多一些用工成本(员工filter哇的一声哭了出来)函数