关于methods、computed、watch的使用,前前后后我有转载过好几篇别人的文章。但始终没有自己成型的博文来记录,现自己尝试性的总结一下三者之间的区别:

computed:计算属性
computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理。
先看例子:
 <template>
<div>
<input type="text" v-model="name" />
<span v-show="isShow">请输入3-6个字符</span>
<br>
<input type="text" v-model="todoName" />
</div>
</template> <script>
export default {
data () {
return {
name: 'zs',
todoName: 'is'
}
},
computed: {
isShow () {
//当this.name的长度小于3或者大于6的时候,显示提示内容(我根据name的变化而变化,别人影响了我)
         //一个数据受多个数据影响,这里就是isShow()受到了name长度的影响,也就是别人影响了我
if (this.name.length >= 3 && this.name.length <= 6) {
return false
} else {
return true
}
}
}
}
</script>

再举个自己在实际项目中应用的例子:

这是一个下拉框,下拉框里需要选择不同的设备类型,而且一个项目中有多个页面都用到了这个模块,于是我将它放在了状态管理vuex里面:

这个return this.configList.deviceSubType就是vuex里的返回变量值,通过监控这个值的变化,进而渲染组件中的内容。

总结:

    1.计算属性是由data中的已知值,得到的一个新值
    2.这个新值只会根据已知值的变化而变化,其它不相关的数据的变化不会影响该值
    3.计算属性不在data中
    4.别人变化影响我自己 
 
watch:监听数据的变化
watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象。watch一般用于监控路由、input输入框的值)特殊处理等等,它比较适合的场景是一个数据影响多个数据。
(去哪儿网里处理过根据input框里输入的数据选择城市)
 <template>
<div>
<input type="text" v-model="name" />
<span v-show="isShow">请输入3-6个字符</span>
<br>
<input type="text" v-model="todoName" />
</div>
</template> <script>
export default {
data () {
return {
name: 'zs',
todoName: 'is'
}
},
computed: {
isShow () {
//当this.name的长度小于3或者大于6的时候,显示提示内容(我根据name的变化而变化,别人影响了我)
if (this.name.length >= 3 && this.name.length <= 6) {
return false
} else {
return true
}
}
},
watch: {
//监听data中的name,如果发生了变化,就把变化的值给data中的todoName(我影响了别人)
name (newVal) {
this.todoName = newVal
console.log(this.todoName)//输入框中输入name的值,todoname跟着变化
}
},
methods: { }
}
</script>

总结:

1.监听data中的数据的变化

2.监听的数据就是data中的已知值

3.我的变化影响了别人

截图下我在公司项目中用到的实际案例,以下是我在监控echart所用到的watch

这里我监控的是一个对象,用到了watch里的hander。

--------------------------------------------------------------

computed,watch和methods的关系
1. computed和watch都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:
       当某一个数据(称它为依赖数据)发生变化的时候,所有依赖这个数据的“相关”数据“自动”发生变化,
       也就是自动调用相关的函数去实现数据的变动
2. 对methods:methods里面是用来定义函数的,它需要手动调用才能执行。而不像watch和computed那样,
       “自动执行”预先定义的函数
3.computed和watch各自处理的数据关系场景不同
    3-1 computed擅长处理的场景:一个数据受多个数据影响
    3-2 wacth擅长处理的场景:一个数据影响多个数据
 
--------------------------------------------------------------
再举个例子,深入研究一下,这个搞懂了,那computed和wacth的使用之后就不会再陌生了。
 <template>
<div>
<input type="text" v-model="firstName" />
<!-- <span v-show="isShow">请输入3-6个字符</span> -->
<br />
<input type="text" v-model="lastName" />
</div>
</template> <script>
export default {
data () {
return {
firstName: 'zhang',
lastName: 'fan',
obj1: {
a: 0
}
}
},
computed: {
// 计算结果并返回,只有当被计算的值发生改变时才会触发
// (即:计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算)
fullName () {
return this.firstName + '' + this.lastName
}
},
watch: {
// 监听某一个值,当被监听的值发生变化时,执行对应的操作 //监听firstName,当firstName发生变化时就会执行该函数
firstName (newVal) {
//执行需要的操作...
//注:初始化不会执行。只有当被监听的值(firstName)发生变化时才会执行
// this.lastName = newVal
},
//监听lastName,当lastName发生变化时就会执行该函数
lastName: {
handler (newVal, oldVal) {
//执行需要的操作
this.firstName = newVal
},
immediate: true //true: 初始化时就会先执行一遍该监听对应的操作
},
//监听对象obj1,当obj1发生变化时就执行相应的操作
obj1: {
handler () {
//执行需要的操作
},
deep: true//该属性值默认为fasle
// 当被监听的值是对象,只有deep为true时,对应属性的值(obj1.a)发生变化时才能触发监听事件,但是这样非常消耗性能
},
//监听对象具体的属性,deep就不需要设置为true了
'obj1.a': {
handler () {
//执行需要的操作...
}
}
},

持续更新...

 

关于methods、computed、watch的使用的更多相关文章

  1. vue中methods,computed,filters,watch的总结

    08.28自我总结 vue中methods,computed,filters,watch的总结 一.methods methods属性里面的方法会在数据发生变化的时候你,只要引用了此里面分方法,方法就 ...

  2. vue methods computed watch区别

    一.methods和computed computed是计算属性,methods是方法. html: <p>Reversed message: "{{ reversedMessa ...

  3. computed,methods,watch

    加载顺序: 在官方文档中,强调了computed区别于method最重要的两点 computed是属性调用,而methods是函数调用 computed带有缓存功能,而methods不是 计算属性是基 ...

  4. watch、computed、methods的区别

    1. `computed`属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算.主要当作属性来使用,要return出去一个值:2. `methods`方法表示一个具体的操作,主要书写业务逻辑:3. ...

  5. computed、methods、watch

    computed:计算属性将被混入到 Vue 实例中.所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例. methods:methods 将被混入到 Vue 实例中 ...

  6. Vue 基础自查——watch、computed和methods的区别

    1 前言 创建一个Vue实例时,可以传入一个选项对象 const vm = new Vue({ data: { msg: 'hello' }, computed: {}, methods: {}, w ...

  7. vue中计算属性computed方法内传参

    vue中computed计算属性无法直接进行传参 如果有传参数的需求比如说做数据筛选功能可以使用闭包函数(也叫匿名函数)实现 例如: 在上篇博客vue安装使用最后的成绩表练习中的过滤功能的实现: &l ...

  8. Vue系列之 => computed实现求值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  9. vue computed计算属性 watch监听

    计算属性 computed:{ 变量:function(){ return 计算好的值 } } 这时候计算好的值 就付给了你的变量 在实例中可以this.使用 注意 声明的变量的data中不可以重复声 ...

  10. computed和watch的用法和区别

    computed可以监听v-model(data)中的值,只要值发生变化 他就会重新去计算 computed必须是要有一个返回值的哦 <div id="app"> &l ...

随机推荐

  1. 【JZOJ4964】【GDKOI2017模拟1.21】Rhyme

    hafy 由于多次交换邮票没有满足所有人的需求,小Z被赶出了集邮部.无处可去的小Z决定加入音乐部,为了让音乐部的人注意到自己的才华,小Z想写一首曲子.为了让自己的曲子更好听,小Z找到了一些好听曲子作为 ...

  2. Django Rest Framework Serializer的简单使用

    1.RESTful 1.1 定义 REST(Representational State Transfer)与技术无关,代表一种软件架构风格,中文为表征状态转移. 1.2 RESTful API设计 ...

  3. 四.使用JDBC进行批处理操作

    1 create table testbatch 2 ( 3 id int primary key, 4 name varchar(20) 5 ); 在实际的项目开发中,有时候需要向数据库发送一批SQ ...

  4. 大话鸿蒙操作系统(一)-- 先聊聊 Fuchsia OS

    大话鸿蒙操作系统(一) 第一篇先不聊鸿蒙操作系统,聊聊 Google 的新系统 Fuchsia OS. 先看看 Fuchsia OS 介绍. 为什么 Google 要造新的 Fuchsia OS 操作 ...

  5. ArcMap影像纠偏

    客户给了一张PNG图,如下图,需要提取其中北极航线. 策略是ArcMap中先配准PNG,使之与底图较好重合.再新建线图层,描出航线.这种彩色丰富的图,很难用栅格转矢量的方式,故应用描边法. 一.配准P ...

  6. Android 高仿微信语音聊天页面高斯模糊效果

    目前的应用市场上,使用毛玻璃效果的APP随处可见,比如用过微信语音聊天的人可以发现,语音聊天页面就使用了高斯模糊效果. 先看下效果图: 仔细观察上图,我们可以发现,背景图以用户头像为模板,对其进行了高 ...

  7. python if elif else 区别

    if data_ori=='医疗': # 医疗 df = pd.read_excel(path_apply + 'apply/YS_ZY_HZSQ_样例.xls', encoding='gbk', e ...

  8. MySQL 获取当前月的天数

    select curdate();                       --获取当前日期 select DATE_ADD(curdate(),interval -day(curdate())+ ...

  9. SPOJ 8073 The area of the union of circles (圆并入门)

    Sphere Online Judge (SPOJ) - Problem CIRU [求圆并的若干种算法,圆并扩展算法]_AekdyCoin的空间_百度空间 参考AekdyCoin的圆并算法解释,根据 ...

  10. 使用HSV色彩空间遮罩绿色区域

    HSV 颜色空间 导入资源 In []: import matplotlib.pyplot as plt import matplotlib.image as mpimg ​ import numpy ...