Vue中计算属性的写法及应用是什么
Admin 2022-07-02 群英技术资讯 301 次浏览
data
中的,但是有些属性可能是需要经过一些逻辑计算后才能得出来,那么我们可以把这类属性变成计算属性。比如以下:
<div id="example"> {{ message.split('').reverse().join('') }} </div>
在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message
的翻转字符串。当你想要在模板中的多处包含此翻转字符串时,就会更加难以处理。
所以,对于任何复杂逻辑,你都应当使用计算属性。
<div id="app"> <h2>总价格:{{totalPrice}}</h2> </div> <script> const vm = new Vue({ el: "#app", data: { message: "hello", books: [ {name: '三国演义', price: 30}, {name: '红楼梦', price: 40}, {name: '西游记', price: 50}, {name: '水浒传', price: 60}, ], }, computed: { // 计算属性的 getter totalPrice: function (){ let result = 0; // `this` 指向 vm 实例 for (let book of this.books){ result += book.price; } return result } } }) </script>
结果:总价格:180
这里我们声明了一个计算属性 totalPrice
。然后通过for循环计算出书的总价,像这种需要计算的属性,就写在computed
中。
属性一般都有get
和set
两个方法,get
获取属性值,set
设置属性值,computed
中默认就是get
属性,我们的vm.totalPrice
是依赖于books.price
,如果书本的价格发生变化,那么计算属性totalPrice
也随之动态变化
你可能已经注意到我们可以通过在表达式中调用方法来达到同样的效果:
<div id="app"> <h2>总价格:{{getAllPrice()}}</h2> </div> <script> const vm = new Vue({ el: "#app", data: { message: "hello", books: [ {name: '三国演义', price: 30}, {name: '红楼梦', price: 40}, {name: '西游记', price: 50}, {name: '水浒传', price: 60}, ], }, methods: { getAllPrice: function () { let result = 0; // `this` 指向 vm 实例 for (let book of this.books){ result += book.price; } return result } }, }) </script>
我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 books
还没有发生改变,多次访问 totalPrice
计算属性会立即返回之前的计算结果,而不必再次执行函数。
所以说计算属性是有缓存的
我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 A
,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A
。如果没有缓存,我们将不可避免的多次执行 A
的 getter
!如果你不希望有缓存,请用方法来替代。
计算属性默认只有 getter
,不过在需要时你也可以提供一个 setter
:
computed: { totalPrice: { get: function () { let result = 0; // `this` 指向 vm 实例 for (let book of this.books){ result += book.price; } return result }, set: function (newValue) { for (let book of this.books){ book.price += 10 } } } }
这里我们添加了set
方法,在运行vm.totalPrice=[...]
时,setter
会被调用,随后书本的总价格也会随之变化,但是一般情况下不会使用set
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了原生JS实现音乐播放器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
最近因为基础设施调整,需要进行harbor镜像仓库的迁移,主要是旧版本很老了,不想使用,直接打算部署新的,原以为直接使用复制功能就可以,但是发现版本差异太大,直接失败,本打算使用中间版本过度进行迁移,但是需要测试,好多功能,而且配置有点费事,尽管官方提供了升级说明,但是没敢用,就怕出故障restapi请求流程还好harbor提供了restapi,还算比较全,proj
这篇文章给大家分享的是有关用js实现淘宝图片切换的效果的内容,这个效果我们常常能在商城网站上看到,小编觉得挺实用的,因此分享给大家做个参考,感兴趣的朋友就跟随小编一起来看看吧。
NaN返回NaN的操作数。无限大除以无限大,返回NaN。0除以0返回NaN,无限除以0,无限返回,有限数除以0返回无限大。将Number(a)转换后运算,而不是数值。
vue3出来一段时间了,element也更新了版本去兼容vue3,下面这篇文章主要给大家介绍了关于vue3集成Element-plus实现按需自动引入组件的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008