深入浅析Vue.js中 computed和methods不同机制


Posted in Javascript onMarch 22, 2018

在vue.js中,有methods和computed两种方式来动态当作方法来用的

1.首先最明显的不同 就是调用的时候,methods要加上()

2.我们可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。

而使用 methods ,在重新渲染的时候,函数总会重新调用执行

为了方便理解,先上一段源码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div class="test">  <!--computed计算属性-->
      <p>{{now}}</p>
      <p>{{now}}</p>
      <p>{{now}}</p>
      <p>{{now}}</p>
      <hr />      <!--横线分割-->
</div>
    <div class="test2">  <!--methods方法,注意new()加了括号-->
      <p>{{now()}}</p>
      <p>{{now()}}</p>
      <p>{{now()}}</p>
      <p>{{now()}}</p>
    </div>
  </body>
  <script type="text/javascript">
    var myVue = new Vue({
      el: ".test",
      computed: {
        now: function() {
          var yanshi = 0;
          for(var o = 0; o < 2000; o++) {   //延时
            for(var q = 0; q < 2000; q++) {
              yanshi++;
            }
          }
          return Date.now()
        }
      }
    });
    var vue2 = new Vue({
      el: '.test2',
      methods: {
        now: function() {
          var yanshi = 0;
          for(var o = 0; o < 2000; o++) {
            for(var q = 0; q < 2000; q++) {
              yanshi++;
            }
          }
          return Date.now()
        }
      }
    })
  </script>
</html>

运行结果如上,可以看出computed计算属性的话,每次进入页面将一直沿用第一次的信息,不会再触发now,这就是依赖缓存。(有延时的情况下 多次输出时间相同)

那什么是相关依赖发生改变时才会重新取值呢 比方说reversedMessage function()计算属性中调用了message变量

就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

而methods是实时的,在重新渲染时,函数总会重新调用执行,不会缓存,(多次输出时间不同)

可以说使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性。

computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter :所以其实computed也是可以传参的。

ps:下面看下vue计算属性computed和methods的区别

在new Vue的配置参数中的computed和methods都可以处理大量的逻辑代码,但是什么时候用哪个属性,要好好区分一下才能做到正确的运用vue。
computed称为计算属性,顾名思义,计算就要返回一个计算的结果,所以,当我们要处理大量的逻辑,但是最后要取得最后的结果的时候可以用computed;
简单示例:
要求:
<input type="text v-model="num1"><input type="text v-model="num2">
现在要返回num1和num2的和;
<script>
  new Vue({
    el:"#box",
    data:{
        num1:0,
        num2:0
        }
    computed:{  
        result:function(){
            return this.num1 + this.num2  
            // 计算属性必须有一个返回值
        }
    }
   })
</script>
methods:是方法的意思,在js中,我们把一些函数叫做方法,一般情况下,要触发这个方法就要执行,要执行就要有一个源来触发,所以就需要一个事件源。这是和computed的一点不同之处;
methods的示例:
要求:
<\button @click="do()">点击弹出<\/button>
<script>
  new Vue({
    el:"#box",
    data:{
        num1:0,
        num2:0
        }
    methods:{  
        do:function(){
           alert('ok')
           //这里根据情况,可以返回有返回值也可以没有返回值。
        }
    }
   })
</script>
对比computed 和 methods:
computed计算的结果如果不发生改变就不会触发result这个函数。而methods中一般都是定义的需要事件触发的一些函数。每次只要触发事件,就会执行对应的方法。如果把computed中的方法写到method中会浪费性能。
computed必须返回一个值页面绑定的才能取得值,而methods中可以只执行逻辑代码,可以有返回值,也可以没有。

总结

以上所述是小编给大家介绍的Vue.js中 computed和methods不同机制,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery JSON的解析方式
Jul 25 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
Feb 17 Javascript
$.each遍历对象、数组的属性值并进行处理
Jul 18 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 Javascript
jQuery下拉菜单的实现代码
Nov 03 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
Mar 01 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
Jul 30 Javascript
javascript自定义事件功能与用法实例分析
Nov 08 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
Nov 05 Javascript
用vscode开发vue应用的方法步骤
May 06 Javascript
Javascript查看大图功能代码实现
May 07 Javascript
Java设计中的Builder模式的介绍
Mar 22 #Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 #Javascript
收集前端面试题之url、href、src
Mar 22 #Javascript
vue 的keep-alive缓存功能的实现
Mar 22 #Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 #Javascript
使用Vue开发动态刷新Echarts组件的教程详解
Mar 22 #Javascript
JavaScript分步实现一个出生日期的正则表达式
Mar 22 #Javascript
You might like
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
书单|人生苦短,你还不用python!
2017/12/29 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
python中字符串的编码与解码详析
2020/12/03 Python
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
物流专业毕业生推荐信范文
2013/11/18 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
个人汇报材料范文
2014/12/30 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python