首页 > 其他分享 >Vue-computed计算属性

Vue-computed计算属性

时间:2022-11-07 01:44:06浏览次数:38  
标签:Vue discounted computed price methods discount 属性

转载于:https://blog.csdn.net/qq_25015861/article/details/123610969 作者:冰咖啡iii

本文只做学习参考;

 

computed计算属性


1、什么是计算属性


计算属性 本质是方法,只是在使用这些 计算属性 的时候,把他们的名称直接当作 属性 来使用,并不会把 计算属性 当作方法去调用,不需要加小括号 ()调用。

 

2、为什么要用计算属性


当你需要一个属性是需要经过一些计算的,比如你要一个discounted折扣后的钱属性,现在有price价格,和discount折扣。那么discounted=price*discount。discounted与现有的属性price和discount相关联。

要得出discounted的值,我们可以这样写。

<div>{{price*discount}}</div>

 

我们不是要 discounted属性吗,这样写貌似不需要添加一个属性,直接用表达计算出折扣后的值就行了。

那么,如果非要得到个discounted呢,我们可能会想到用methods写个方法进行计算

 

<!--template-->
<div class="price">
        原价:<span v-text="price"></span><br>
        现价: <span v-text="discounted()"></span>
</div>
<!--script-->
  data() {
    return {
      price:100,
      discount:0.8
    }
  },
  methods: {
  discounted(){
      this.price*discount
    }
  },

 

再看看vue的comunidad计算属性

<!--template-->
<div class="price">
        原价:<span v-text="price"></span><br>
        现价: <span v-text="discounted"></span>
</div>
<!--script-->
computed: {
    discounted(){
      return this.price*this.discount
    }
  },

 

 

我们又会想,用表达式price*discount不就可以得出discounted吗,为什么还要费那么大功夫写什么方法,computed。

那么问题就来了,如果我们的discounted是根据你买的金额,按一下规则来:

 

原价x 折扣
0<x<=50 0.9
50<x<=100 0.85
100<x 0.8

 

那么我们该如何实现呢?我们先试着直接用表达式看看。

 

 

这里报错了,显然不支持多行表达式。如果需要经过一些稍微复杂的计算,我们就必须使用函数了。

 

 

但是,还是建议即使是简单的表达式,还是建议写成computed或者computed里

 

因为我们写程序要有关注分离的思想,比如css就写在< style >里,js就写在< script >里,这样更方便我们阅读,也使代码更加规范。

那么,又有问题来了,这里我们的确得出了想要的值,但我们发现用methods不就行了吗,为啥还要computed呢,这两者有什么区别?

 

1、methods使用时,一般情况需要加括号,而computed则不需要。

2、methods每次调用时会重新执行函数,而computed在其内部变量不变或其返回值不变的情况下多次调用只会执行一次,后续执行时直接从缓存中获取该computed的结果。

 

至于为什么computed为什么不像methods一样使用小括号调用,是由于computed本身就是一个属性,其本质是computed内部有两个方法(set和get),computed最终的得到的结果是get方法的返回值,而set方法很少使用到,因此简化写法就是上述正常使用computed的格式。

 

3、compute、methods和watch三者的区别

 

computed methods watch
缓存 没有 没有
异步 不行 不行
触发 模板使用:数据 模板使用:方法 被监控数据发送变动
灵活度 最低 最高
推荐度 最高 其次 最低(依赖关系容易变得复杂)

 


 

 

标签:Vue,discounted,computed,price,methods,discount,属性
From: https://www.cnblogs.com/ZhuAo/p/16864755.html

相关文章

  • vue $nextTick方法
    $nextTick方法问题:异步代码没有执行,但是同步代码已经完成逻辑,所以就需要使用$nextTick来等待dom完毕后再执行同步代码解决方法:使用nextTick()等待dom更新完毕后,在......
  • 初识vue3
    Vue3vue3安装vue--version##安装或者升级你的@vue/clinpminstall-g@vue/cli##创建vuecreatemyv3##启动cdmyv3npmrunservevue3特点新增组合式api......
  • 10.Vue中常用的第三方组件
    第三方插件可以增强vue,帮助我们更好的开发项目,如axios,vuex,vue-router,elementui等我们可以自定义插件,步骤如下:在vue项目下的src文件夹下创建plugins文件夹,创建一个i......
  • Vue3 用keep-alive实现tab页缓存
    一般国产味道的后台界面,都会有一个类似于浏览器tab标签的东西大概就是这样的,可以点击标签切换不同的路由,并且不丢失之前录入的数据。但是vue-router默认是不支持该操......
  • vue 自定义v-model
    怎么通过子组件修改父级组件的表单组件v-model绑定的变量。其中,子组件这样写,通过@input事件(这个事件主要用于监听,只有输入值变化了就会触发input),然后触发修改父组件的sel......
  • 前端vue2下使用media query 媒体查询报错问题
    在前端vue2项目下,如果直接像普通css那样使用meidiaquery,是不起作用的需要安装sass和sass-loader在package.json中指定一下依赖,一定要注意版本,经过我的测试我现在这个版......
  • Vue的键盘事件
    1.常见的键盘事件 keydown:按下键盘,不需要抬起来就会触发keyup:按下键盘,等键盘抬起来才会触发 2.键盘按下,输出输入框中输入的值 <!DOCTYPEhtml><htmllang="en......
  • vue导出word文档
    具体需求在我的疫情可视化项目中有一个功能需要导出word文档,在页面点击按钮后处理数据生成word文件,然后自动下载文档。实现步骤多番查询后发现前端导出word,使用docxtem......
  • 3.前端框架Vue
    Vue是一套前端框架,免除原生javaScript中的DOM操作,简化书写。基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上官网:http://cn.vuejs.orgv-m......
  • IE 兼容性问题,使用vue2.0 翻车了
    在项目上线后,疏忽了,由于调试时候的代码没有注释掉,在谷歌轴并没有什么影响,但是在IE中就翻车,直接干了一个,xxxxxjavascript,,,语法错误,当时并没有想起来是这方面的问题,就一直......