最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue3.0中为啥要删除过滤器功能,因为功能重复吧?

    正文概述 掘金(水冗水孚)   2021-05-09   467

    问题描述

    去年,也就是2020年9月份,vue3出来了。增加了很多新功能,但是也删掉了一些功能。比如删掉了vue2中的过滤器filter功能。与此同时,官方建议:用方法调用或计算属性替换过滤器。

    什么是vue的过滤器

    过滤器可以通俗理解成是一个特殊的方法,用来加工数据的

    • 比如枚举值可以使用过滤器:如 1 2 3 4 对应 成功 失败 进行中 已退回
    • 比如价格后面跟个过滤器,将价格格式化成小数点两位
    • 比如时间格式化等

    why?

    笔者认为:原因就是vue3要精简代码,并且filter功能重复,filter能实现的功能,methods和计算属性基本上也可以实现。所以就干脆把filter这方面的vue源码给删掉,这样的话,更加方便维护。

    举例分析

    需求描述

    假设我们有一个快递信息,后端返回给我们的并不是具体的状态值,而是对应的字符串1 2 3 4 5 6等,不同的状态有着一套对应规则,比如状态为1是待发货等,具体效果图和状态对应关系如下图:

    vue3.0中为啥要删除过滤器功能,因为功能重复吧?

    HTML结构和data数据如下

    <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实现

    <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>
    

    使用computed实现

    <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>
    

    使用methods实现

    <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>
    

    总结

    vue3删除了filter就好比:

    员工filter会干的活,员工computed和员工methods也会干,而且比员工filter干得多,干的好。这样的话,老板vue就把filter开除了,filter就被fired了。毕竟多一个员工,多一些用工成本(员工filter哇的一声哭了出来)


    起源地下载网 » vue3.0中为啥要删除过滤器功能,因为功能重复吧?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元