深入浅析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 相关文章推荐
CSDN轮换广告图片轮换效果
Mar 27 Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
javascript中的缓动效果实现程序
Dec 29 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
jQuery实现背景滑动菜单
Dec 02 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 Javascript
js canvas实现简单的图像扩散效果
Jun 28 Javascript
通过源码分析Vue的双向数据绑定详解
Sep 24 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 jQuery
Vue Object.defineProperty及ProxyVue实现双向数据绑定
Sep 02 Javascript
vue实现下拉菜单树
Oct 22 Javascript
详解JS WebSocket断开原因和心跳机制
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 $_FILES函数详解
2011/03/09 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
js原生日历的实例(推荐)
2017/10/31 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
如何使用Python 打印各种三角形
2019/06/28 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
django实现模型字段动态choice的操作
2020/04/01 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
承诺书格式
2014/06/03 职场文书
2014年个人售房协议书
2014/10/30 职场文书
个人党性锻炼总结
2015/03/05 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS