vue计算属性和侦听器

Posted -王二毛-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue计算属性和侦听器相关的知识,希望对你有一定的参考价值。

vue2计算属性和侦听器官网介绍

1、功能不同,计算属性用于解决模板语法冗余问题;侦听器侦听data中某一个数据变化。

2、计算属性有缓存机制,侦听器没有缓存机制

  • 计算属性:支持缓存,只有当依赖项数据发生改变,才会重新进行计算
  • 侦听器:不支持缓存的,数据变化,就会直接触发响应的操作

3、计算属性不支持异步操作,侦听器支持异步操作

  • 计算属性:不支持异步操作的,当计算属性computed内有异步操作的时候,无法监听数据的变化,此时计算属性computed是无效的;
  • 侦听器:支持异步的操作,监听的函数接受到两个参数,第一个参数是最新的值,第二个参数是输入之前的值。

4、计算属性可以给vue新增属性,侦听器必须是data中已有属性

5、计算属性只要使用了就会立即执行一次,侦听器默认只有当数据第一次执行才会执行

6、侦听器可以通过设置immerdiate为true,也可以像计算属性一样立即执行一次

  • 侦听器中的immediate属性: immediate设置为 true 的意思就是组件加载立即触发回调函数执行

7、擅长处理的场景

  • 计算属性:就是一个数据受多个数据的影响;比如项目中的购物车计算价格(多个商品影响总计),数据的全选和反选;
  • 侦听器:一个数据影响多个数据;比如项目中的搜索框,输入搜索条件,得到许多搜索结果。

计算属性

computed: 
  fullName: 
    // getter,该函数不接受参数,当初次读取计算属性或者计算属性所依赖的数据发生变化时被调用
    get: function () 
      return this.firstName + ' ' + this.lastName
    ,
    // setter,接受一个可选参数(计算属性被修改之后的值),当计算属性被修改时被调用
    set: function (newValue) 
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    
  

如果计算属性computed需要对数据进行修改,需要写get和set两个方法,当数据变化时,就调用set方法

侦听器

var watchExampleVM = new Vue(
  el: '#watch-example',
  data: 
    question: '',
  ,
  watch: 
    // 如果 `question` 发生改变,这个函数就会运行
    question: function (newQuestion, oldQuestion) 
      console.log(newQuestion);
      console.log(oldQuestion);
    
  
)

//immediate属性======================
var watchExampleVM = new Vue(
  el: '#watch-example',
  data: 
    question: '',
  ,
  watch: 
    // 如果 `question` 发生改变,这个函数就会运行
    question:
     handler(newQuestion, oldQuestion) 
      console.log(newQuestion);
      console.log(oldQuestion);
      ,
      // 代表在wacth里声明了name这个方法之后立即先去执行一次handler方法
      immediate: true
    
  
)

//deep属性======================
/*
侦听器中的deep属性,deep设置为 true 的意思就是深入侦听,
修改对象里面任何一个属性都会触发这个监听器里面的 handler 方法来处理响应的逻辑
*/
//不适用deep
<script>
    var vm = new Vue(
      el: '#app',
      data: 
        product: 
          name: '',
          count: '',
          title: ''
        
      ,
      watch: 
        'product.name': function(newValue)
          console.log(newValue)
        ,
        'product.count': function(newValue)
          console.log(newValue)
        ,
        'product.title': function(newValue)
          console.log(newValue)
        
      
    )
  </script>
//使用deep
<script>
    var vm = new Vue(
      el: '#app',
      data: 
        product: 
          name: '',
          count: '',
          title: ''
        
      ,
      watch: 
        product: 
          handler: function(newVal) 
            console.log(newVal)
          ,
          deep: true
        
      
    )
  </script>

以上是关于vue计算属性和侦听器的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js学习日记——计算属性和侦听器

Vue.js 实战教程 V2.x计算属性和侦听器

Vue.js 系列 - 计算属性方法和监听器

vue之计算属性和侦听器

vue中计算属性,方法,侦听器

技术小知识——Vue.js—watch