热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

methods,watch和computed都是以函数为基础的,但各自却都不同;1.watch和computed都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:当某

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

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

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

 【总结】: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擅长处理的场景:一个数据影响多个数据

技术图片

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

技术图片

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>Titletitle>
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=new Vue({
        el:#app,
        data:{
            message: Hello
        },
        computed:{
            // 计算属性的 getter
            reversedMessage(){
                count++;
                // `this` 指向 vm 实例
                return count+‘‘+this.message.split(‘‘).reverse().join(‘‘)
            }
        },
        methods:{
            change(){
                this.message="fdafdafsda";
            },
 
            reversedMessage2() {
                count++;
                return count+‘‘+this.message.split(‘‘).reverse().join(‘‘)
            }
        }
    })
 
 
script>
body>
html>

技术图片

原文出处:

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

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

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


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
author-avatar
星控-集中营_220
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有