vue中的computed与watch与methods

计算属性computed和watch以及methods的作用区别


前言

本篇文章主要总结了,vue当中必会的知识。计算属性computed、监听器watch、方法methods的用法,以及作用和区别。


一、methods是什么?

在vue中定义的methods属性,用来存放所有需要实现的方法。
例如:

var app = new Vue({
    methods:{
    //在此处定义方法
    方法名:function(){
    }
  }
});

二、什么是computed?

当页面中有某些数据依赖其他数据进行变动的时候,可以使用计算属性。

computed: {
   get: function () { 
      return this.firstName + ' ' + this.lastName;// 必须要有return
  },
}

三、什么是watch?

当页面中某一个数据变动的时候,需要进行其它数据联动变换的时候。
实例:见下文

watch: {// 数据变化时执行异步或开销较大的操作
  nameValue(value) {
    this.checkName(value);
    this.tip = "正在验证......";
  }
}

四、计算属性computed和methods的区别?

computed 能实现的,methods 肯定也能够实现。
不同之处在于,computed 是基于他的依赖进行缓存的,computed 只有在他的的相关依赖发生改变的时候才会重新计算
如果他的相关依赖并没有发生改变,每次访问都是返回他的缓存的值
methods,则是每次触发重新渲染之后,调用方法会再次执行函数。
总结:当我们不希望有缓存的时候,就使用methods

五、计算属性和watch的区别?

computed 和 watch 的相同和不同之处

1、相同点

computed 和 watch 都是以vue的依赖追踪为基础的,都是希望当依赖发生改变的时候,被依赖的数据根据预定好的函数发生改变。

2、不同点

watch 监听,一般是监听一个数据,从而影响多个数据
computed 计算属性, 一般是计算一个属性,这个属性受多个数据影响
总结:一般使用computed,但是如果需要异步,或者数据开销太大的情况下,使用watch.

六、归纳三者不同点

methods,watch和computed都是以函数为基础的,但各自却都不同;

1、methods

不存在缓存,执行一次运行一次,执行n次,运行n次

2、computed

使用场景:当页面中有某些数据依赖其他数据进行变动的时候,可以使用计算属性
计算属性 computed 是基于data中数据进行处理的,data数据变化,他也跟着变化
当data中数据没有发生改变时,我们调用computed中函数n次,只会进行缓存(执行一次)
每个计算属性都包含两个set、get 属性
<div>{{get}} </div> //调用时候,直接写上函数名即可

computed: {
   get: function () { //这里不适合写 get(),语法规定
     return this.firstName + ' ' + this.lastName;// 必须要有return
  },
}

3、watch

使用场景:数据变化时执行异步或开销较大的操作,可以随时修改状态的变化
watch:类似于监听机制+事件机制。
在大部分情况下我们都会使用computed,但如果要在数据变化的同时进行异步操作或者是比较大的开销,那么watch为最佳选择。watch为一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。
// 这里直接用 v-model 来绑定,不需要添加 change 事件

<input type="text" v-model="name" />  {{tip}}
  data() {
    return {
      name: "",
      tip: ""
    };
  },
  methods: {
    checkName(value) {
      var arg = this;
      setTimeout(() => {
        if (value == "aa") {
          arg.tip = "用户名已存在";
        } else {
          arg.tip = "用户名可以使用";
        }
      }, 1000);
    }
  },
  watch: {// 数据变化时执行异步或开销较大的操作
    name(value) {
      this.checkName(value);
      this.tip = "正在验证......";
    }
  }

watch的高级用法
上面的watch方法是当改变值时候,才会触发监听事件,但是我们想刚进入页面时候,就触发监听事件,就要用handler()方法
1,handler():当页面刚进入时,自动绑定watch事件,不需要进行触发

watch: {// 页面加载时,就自动触发此事件
  name:{
    handler(new){
       this.checkName(value);
       this.tip = "正在验证......";
    }
  }
}

2,immediate属性:布尔值
immediate:true:首次加载就监听数据变化
immediate:false:只有发生改变才监听

watch: {// 页面加载时,就自动触发此事件
  name:{
    handler(new){
       this.checkName(value);
       this.tip = "正在验证......";
    },
     immediate: true 
  }
}

3,deep:true;当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,此时就需要deep属性对对象进行深度监听。

data() {
  return {
      name: {
          'fristname': 'a',
          'lastname': 'a'
      },
      nameCount:0
  }
},
watch: {
  name: {
      handler(newVal) {
          this.name++
      },
  deep: true
  }    
}

设置deep:true则可以监听到name的变化,此时会给name的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。
如果只需要监听对象中的一个属性值,可以字符串的形式监听对象属性:

watch: {
  'name.first': {
      handler(newVal) {
          this.name++
      },
  deep: true
  }    
}

总结

总结不易,学习到其中的知识最重要,如有错误,欢迎评论指正,虚心接受。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当使用Vue.js时,`computed`,`watch`和`methods`都是非常有用的功能。 `computed`属性是一种计算属性,可以根据其依赖关系动态地计算属性值。当它所依赖的属性发生变化时,它会自动重新计算属性值。这使得计算属性非常适合处理动态数据,例如将一组数据进行过滤、排序或计数。 示例代码: ```javascript computed: { // 计算属性,基于 count 和 factor 计算 total total: function () { return this.count * this.factor; } } ``` `watch`属性是一种观察属性,它可以监视Vue实例的属性,并在其发生变化时执行指定的函数。这使得它非常适合处理异步数据,例如通过Ajax请求获取数据。 示例代码: ```javascript watch: { // 监视 message 属性的变化,并在变化时执行 showMessage 函数 message: function (newVal, oldVal) { this.showMessage(newVal); } } ``` `methods`属性是一个方法集合,它包含了Vue实例可用的所有方法。当你需要执行某些特定的操作时,你可以调用其一个方法。 示例代码: ```javascript methods: { // 定义一个 greet 方法 greet: function () { alert('Hello!'); } } ``` 总的来说,`computed`和`watch`适合处理不同类型的数据,而`methods`则是执行特定操作的最佳选择。 ### 回答2: Vue.js是一款MVVM模式的渐进式JavaScript框架。其computedwatchmethodsVue.js非常重要的3个元素,它们分别用于计算、监听数据和存放方法。 1. Computed computed属性可以定义一个计算属性,类似于Vue.js的响应式变量,可以根据依赖数据的变化自动计算得出新的值。computed属性可以使用get和set方法来实现对计算属性的读取和写入操作,在模板该属性会被当做一个正常的属性来处理。 computed适用于需要计算或派生新的值的场景,因为是缓存的,所以可以提升效率。如果依赖的数据没有发生改变,那么计算属性不会重新运行。通常computed适用于重复调用一个函数,但结果又不想重复计算的情况。 2. Watch watch属性是Vue.js用于监听数据变化的方法。它可以监听任何位于data属性的数据变化,当数据变化时,watch会立即执行指定的回调函数。watch可以监听单个变量,也可以监听一个对象或数组,当一个数据集合发生变化时,回调函数只会执行一次,这样可以防止多重操作的影响。 watch适用于需要执行异步操作或需要监听数据变化的场合。watchcomputed运行开销要大,因为它需要在数据发生变化时立刻运行回调函数,这样可能会导致性能问题。通常watch适用于数据变化需要执行比较复杂的操作情况。 3. Methods methods属性是Vue.js存放方法的地方。它们可以在模板通过v-on指令来进行调用。与computed不同的是,methods属性的方法不会自动计算,也不会缓存。每次需要调用方法时,都需要重新运行方法。 methods适用于需要执行一些常规操作、事件的处理、绑定指令等任务。当需要在模板执行复杂操作或有一些逻辑判断时,也可以使用methods。因为methods需要每次都重新计算运行,因此,如果该方法在模板被多次调用,可能会导致性能问题。 综上所述,computedwatchmethodsVue.js各有所长,选择何种方法取决于具体的需求和场景。使用computed可以提升性能,使用watch适用于需要异步处理或监听数据变化的场景,使用methods则适合处理一些常规操作和事件绑定。 ### 回答3: 在 Vue computedwatchmethods 都是非常重要的工具,它们都有自己独特的用途和作用。 Computed Computed 是一种计算属性,基于已有的数据生成新的数据并自动更新,通常用于数据计算,并将结果返回给模板使用。 Computed 应该是纯函数,依赖于数据响应式系统,只有当依赖的数据发生改变时,computed 才会重新计算。 在代码实现computed 的实现方法类似于一个函数,可以使用 get 和 set 语法,也可以简写。 Watch Watch 是数据监听的一种方法,用于监听数据变化并作出相应的操作,可以监听一个或多个属性,当被监听的属性发生变化时,就会触发所声明的函数。 在声明 watch 时,需要指定其监听的数据和回调函数,监听的数据可以是简单类型也可以是复杂类型,当监听的数据属性值发生变化时,watch 回调函数就会被调用,可以在回调函数进行相应的操作。 Methods MethodsVue 实例上定义的方法,可以在模板调用它们完成特定的功能。与 computed 不同的是,methods 方法可以接受参数,通过 this 调用实例上的数据,它们是可变的而 computed 不可变。 方法的代码实现类似于一个函数,可以接受参数,可以调用实例上的数据、方法和其他组件等,并在模板通过方法来执行相应的操作。 在实际开发过程,要灵活选择computedwatchmethods进行数据处理和绑定,根据不同的需求来进行选择使用,以达到高效运行和最佳性能的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值