谈谈vue.js中methods watch和compute的区别和联系

摘要:
methods,watch和computed都是以函数为基础的,但各自却都不同;1.watch和computed都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:当某一个数据发生变化的时候,所有依赖这个数据的“相关”数据“自动”发生变化,也就是自动调用相关的函数去实现数据的变动。

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

1.watchcomputed都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:当某一个数据(称它为依赖数据)发生变化的时候,所有依赖这个数据的“相关”数据“自动”发生变化,也就是自动调用相关的函数去实现数据的变动。

2.对methods:methods里面是用来定义函数的,很显然,它需要手动调用才能执行。
而不像watchcomputed那样,“自动执行”预先定义的函数

3.computed 对象内的方法如果在初始化绑定到元素上的事件先执行一次这个方法 ,而 methods 内的方法则不会;

【总结】:methods里面定义的函数,是需要主动调用的,而和watch和computed相关的函数,会自动调用,完成我们希望完成的作用

从性质上看:

1.methods里面定义的是函数,methods是方法,只要调用它,函数就会执行;

2.computed是计算属性,事实上和和data对象里的数据属性是同一类的(使用上),

<p>原始数据:{{msg}}</p>  
<p>改变后的数据:{{changemsg}}</p>
var vm=new Vue({ 
el:"#example",   
data:{ 
 msg:"hello",  
},  
computed:{  //计算属性
    changemsg:function(){  
    return this.msg.split("").reverse().join("");  
    },  
} 

你在取用的时候,用this.changemsg去取用,就和取data一样(不要当成函数调用!!)

computed属性 VS watched 属性:

watch和computed各自处理的数据关系场景不同

1.watch擅长处理的场景:一个数据影响多个数据

谈谈vue.js中methods watch和compute的区别和联系第1张

2.computed擅长处理的场景:一个数据受多个数据影响

谈谈vue.js中methods watch和compute的区别和联系第2张

watched属性:代码更易于理解,它指定监测的值是谁,然后相应的改变其他的值。

var vm = new Vue({  
el: '#demo',  
data: { 
    firstName: 'Foo', 
    lastName: 'Bar',  
    fullName: 'Foo Bar' 
   },  
watch: {  
    firstName: function (val) {  
        this.fullName = val + ' ' + this.lastName 
    },  
    lastName: function (val) {   
        this.fullName = this.firstName + ' ' + val 
    }  
   } 
}) 

computed属性:

var vm = new Vue({ 
       el: '#demo',  
     data: {  
           firstName: 'Foo', 
           lastName: 'Bar'
   }, 
 computed: {  
       fullName: function () {   
           return this.firstName + ' ' + this.lastName 
       }  
   } 
})

需要注意的是,

methods调用的方法是没有缓存

computed调用的方法是有缓存,如果之前调用过,则直接返回结果而不是重复计算

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <div>{{ message.split('').reverse().join('') }}
    </div>
    <h2>计算属性</h2>
    <div>
        <p>Original message: "{{ message }}"</p>
        <p>Computed reversed message: "{{ reversedMessage }}"</p>
        <button @click="change()">改变</button>
    </div>
    <h2>计算属性缓存 vs 方法</h2>
    <p>Computed reversed message: "{{ reversedMessage }}"</p>
    <p>Computed reversed message: "{{ reversedMessage }}"</p>
    <p>Reversed message: "{{ reversedMessage2() }}"</p>
    <p>Reversed message: "{{ reversedMessage2() }}"</p>
 
</div>
<script type="text/javascript"src="js/vue2.6.js"></script>
<script type="text/javascript">let count=1;
    let vm=newVue({
        el:'#app',
        data:{
            message: 'Hello'},
        computed:{
            //计算属性的 getter
reversedMessage(){
                count++;
                //`this` 指向 vm 实例
                returncount+''+this.message.split('').reverse().join('')
            }
        },
        methods:{
            change(){
                this.message="fdafdafsda";
            },
 
            reversedMessage2() {
                count++;
                returncount+''+this.message.split('').reverse().join('')
            }
        }
    })
 
 
</script>
</body>
</html>

QQ鎴�浘20190628212613.jpg

原文出处:

https://my.oschina.net/u/3649083/blog/1560106

http://blog.java1234.com/blog/articles/533.html

免责声明:文章转载自《谈谈vue.js中methods watch和compute的区别和联系》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux基础常用操作(转)Arcgis for Js之鼠标经过显示对象名的实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

海思MPP视频处理平台流程简介

海思MPP视频处理平台流程介绍海思芯片系统概述首先,让我们了解海思芯片SOC。下图是hi3519A芯片设计图。图1是hi3519AV100芯片设计图。芯片设计图有助于我们全面了解海思的图像处理。从上图中,我们可以看到许多控制芯片集成在芯片SOC中,例如用于深度学习的NNIE硬核、IVE硬核、视频编码和解码单元H265/H264Codec以及图像处理单元ISP...

android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)

在制作视图背景特效时,我被各种获取坐标的方法弄糊涂了,来回复制的几篇博文也不清楚。涉及以下方法:view获取自己的坐标:getLeft()、getTop()、getRight()和getBottom()view获取自己自己的宽度和高度:getHeight(),getWidth()motionEvent获取其坐标:getX()、get Y()、Get RawX...

华为交换机堆叠配置

请参考华为交换机的配置堆栈。[Leaf1-stack-port0/1]portinterfaceg0/0/12启用物理接口12加入堆栈组[Leaf1]stackslot0priority255修改优先级255,默认值为100警告:不要频繁修改优先级,因为它会使堆栈分裂。持续...

selenium自动化之鼠标操作

,selenium为我们提供了一个处理此类事件的类——ActionChains。ActionChains可以模拟鼠标操作,例如单击、双击、右键单击、拖动等。鼠标移动时演示页面的截图:demo1.使用鼠标移动到WriteonOver按钮的顶部。python脚本如下:读取鼠标移动代码,首先定义浏览器驱动程序,最大化窗口,打开测试页面URL,定位到测试按钮顶部,定...

json文件 乱码问题 根本解决办法

1工具→ 定制2单击命令选项卡;3选择上部单选区域中的菜单栏,然后从下拉列表中选择文件;4单击“添加”命令5,在类别中查找文件,找到右侧的高级保存选项,然后单击“确定”6,通过向下移动来调整“文件”菜单中选项的位置。如果你有任何问题,请留言!...

页面加载时自动执行(加载)js的几种方法

Js调用onload方法window.onload=function(){func1();func2();func3();}二、JQ方法1.整个页面的document全部加载完成以后执行。不幸的这种方式不仅要求页面的DOMtree全部加载完成,而且要求所有的外部图片和资源全部加载完成。更不幸的是,如果外部资源,例如图片需要很长时间来加载,那么这个js方法执行...