• Vue filtersfilter、computed、methods、watch对比


    熟悉Vue的人对filtersfilter、computed、methods、watch都不陌生,它们四者都可以用来处理数据,那么它们究竟有什么差异呢?

    一、filtersfilter(过滤器)

    1、用于一些常见的文本格式化(格式化数据

    2、过滤器函数总接收表达式的值 (之前的操作链的结果) 作为第一个参数(必须要有参数,没有参数过滤就没有任何意义)

    3、不能直接访问this(如果一定要访问,可以定义一个全局变量在created()方法中指向this,不过不推荐此做法)

    4、不会缓存格式化的数据

    5、有全局过滤器(Vue.filter)和局部过滤器(filters)(当全局过滤器和局部过滤器重名时,会采用局部过滤器)

    6、在调用时就会触发(调用频次高)

    7、支持链式调用(增加了组合拼接的能力,可以在项目架构层面定义一堆基础的、简单的filter,按需在组件内组合适用)

    8、复用性高(可以在组件外抽象)

    9、一般用于模板渲染

    10、适用于格式化输出场景(比如日期格式化)

    11、得到的值需要return出去

    过滤器可以用在两个地方:

    双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。

    过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:

    <!-- 在双花括号中 -->
    {{ message | capitalize }}
    
    <!-- 在 `v-bind` 中 -->
    <div v-bind:id="rawId | formatId"></div>

    局部过滤器

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

    全局过滤器

    Vue.filter('capitalize', function (value) {
      if (!value) return ''
      value = value.toString()
      return value.charAt(0).toUpperCase() + value.slice(1)
    })
    
    new Vue({
      // ...
    })

    官方详解:https://cn.vuejs.org/v2/guide/filters.html#ad

    二、computed(计算属性

    1、处理任何复杂逻辑(逻辑相关

    2、具有缓存能力(基于响应式依赖进行缓存)

    3、调用频次低(只在相关响应式依赖发生改变时才会重新求值,对系统消耗小)

    4、复用性低(依赖于组件,难以抽取成独立逻辑)

    5、应用范围广泛(可以应用在其他computed、methods、生命周期函数、模板)

    6、可以使用this

    7、基于已有的属性(通过现有的属性计算出一个新的属性)

    8、只能在组件内部或通过mixins对象定义

    9、适用于复杂的数据转换、统计等场景。

    10、默认只有 getter,不过在需要时你也可以提供一个 setter

    11、得到的值需要return出去

    12、参数传递(闭包传值:https://www.jianshu.com/p/95606f32c5f5)

    基础示例:

    <div id="example">
      <p>Original message: "{{ message }}"</p>
      <p>Computed reversed message: "{{ reversedMessage }}"</p>
    </div>
    var vm = new Vue({
      el: '#example',
      data: {
        message: 'Hello'
      },
      computed: {
        // 计算属性的 getter
        reversedMessage: function () {
          // `this` 指向 vm 实例
          return this.message.split('').reverse().join('')
        }
      }
    })

    官方详解:https://cn.vuejs.org/v2/guide/computed.html#计算属性

    三、methods(方法)

    1、不可以使用箭头函数

    2、在调用时就会触发(调用频次高)

    var vm = new Vue({
      data: { a: 1 },
      methods: {
        plus: function () {
          this.a++
        }
      }
    })
    vm.plus()
    vm.a // 2

    四、watch(侦听器)

    1、当需要在数据变化时执行异步开销较大的操作时

    2、允许我们执行异步操作 (访问一个 API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。(这些都是计算属性无法做到的)

    3、监控已有属性(一旦属性发生了改变就去自动调用对应的方法)

    4、不会缓存数据(每次打开页面都会重新加载一次)

    5、一般使用较少(计算属性在大多数情况下更合适)

    官方详解:https://cn.vuejs.org/v2/guide/computed.html#侦听器

  • 相关阅读:
    用python实现批量替换.doc文件文件内容
    记我是如何通过Security+考试的
    去哪儿笔试羊生羊问题
    CSS作用域问题
    常用的几种清除浮动的方式
    ECE转专业找工作经历-从零电面到facebook offer
    面经-Bloomberg
    题解-Linked List Cycle II
    自我介绍
    解题技巧-发现子结构
  • 原文地址:https://www.cnblogs.com/lijianyi/p/14602749.html
Copyright © 2020-2023  润新知