vue 计算属性与方法跟侦听器区别的解析

这篇文章主要介绍了详解vue 计算属性与方法跟侦听器区别(面试考点),内容挺不错的,现在分享给大家,也给大家做个参考。

计算属性

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如:

 {{ message.split('').reverse().join('') }}

登录后复制

在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message 的翻转字符串。当你想要在模板中多次引用此处的翻转字符串时,就会更加难以处理。

立即学习“前端免费学习笔记(深入)”;

所以,对于任何复杂逻辑,你都应当使用计算属性。

基础例子

 {{fullName}}

    var vm = new Vue({ el: '#app', data: {  firstName: "王",  lastName: "小智",  age: 28 }, // 计算属性 computed: {   fullName: function () {     console.log("计算了一次")     return this.firstName + " " + this.lastName   } }})

登录后复制

结果:

王小智

然后我们通过浏览器改变age属性的值,让页面重新渲染:

vue 计算属性与方法跟侦听器区别的解析

大家可以看到,我们改变了age值计算属性的方法没有被调用,那如果计算属性的值发生了改变,如lastName或者firstName改变,打印结果又会怎么样呢?

vue 计算属性与方法跟侦听器区别的解析

大家可以看到,当他依赖的发生变化的时候,计算属性会重新计算一次。

计算属性缓存 vs 方法

你可能已经注意到我们可以通过在表达式中调用方法来达到同样的效果:

Reversed message: "{{ fullName() }}"

// 在组件中methods: { fullName: function () {  console.log("计算了一次")  return this.firstName + " " + this.lastName; }}

登录后复制

结果:

王小智

同样参照上面,我们通过浏览器改变age属性的值,让页面重新渲染:

vue 计算属性与方法跟侦听器区别的解析

可以看出,我们页面只要重新渲染,方法都会执行一次,而计算属性只有在它的相关依赖发生改变时才会重新求值。

我们为什么需要缓存?假设我们有一个性能开销比较大的的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代。

计算属性 vs 侦听属性

你可能已经注意到我们还可以通过侦听属性达到同样的效果:

var vm = new Vue({ el: '#app', data: {  firstName: "王",  lastName: "小智",  age: 28,  fullName }, // 计算属性 watch: {   firstName: function () {    console.log("计算了一次");    this.fullNmae = this.firstName + this.lastName;   },   lastName: function () {    console.log("计算了一次")    this.fullNmae = this.firstName + this.lastName;   } }})

登录后复制

结果:

王小智

同样参照上面,我们通过浏览器改变age属性的值,让页面重新渲染:

vue 计算属性与方法跟侦听器区别的解析

大家可以看到,和fullname不相关的改变,fullName没有变化,跟计算属性类似,会有缓存,只有在它的相关依赖发生改变时才会重新求值,将它与计算属性的版本进行比较,好得多了,不是吗?

当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过
AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch 回调。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

分析关于Vue SSR 的 Cookies 问题

分析关于Vue SSR 的 Cookies 问题

分析关于Vue SSR 的 Cookies 问题

以上就是vue 计算属性与方法跟侦听器区别的解析的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2747723.html

(0)
上一篇 2025年3月8日 04:26:50
下一篇 2025年3月8日 04:26:59

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 分析关于Vue SSR 的 Cookies 问题

    本篇文章主要介绍了浅谈vue ssr 的 cookies 问题,内容挺不错的,现在分享给大家,也给大家做个参考。 一个网站一旦涉及到多用户, 就很难从 Cookies 中逃脱, Vue SSR 的 cookies 也真算是遇到的一个不小的问…

    编程技术 2025年3月8日
    000
  • Vue2.0 多 Tab切换组件的封装介绍

    本篇文章主要介绍了vue2.0 多 tab切换组件的封装实例,内容挺不错的,现在分享给大家,也给大家做个参考。 Vue2.0 多 Tab切换组件简单封装,满足自己简单的功能,可以直接拿去使用! 首先上效果图: 功能简单介绍: 1、支持tab…

    2025年3月8日
    200
  • Vue 去除路径中的#号的方法

    大家都知道vue-router有两种模式,hash模式和history模式,带#的则是hash模式。接下来给大家带来了vue 去除路径中的#号的解决方法,感兴趣的朋友一起看看吧 在开发过程中发现路径中带有/#/的标示,而且还去不掉,很丑陋。…

    2025年3月8日
    200
  • Vue组件通信实践的介绍

    本篇文章主要介绍了vue组件通信实践记录(推荐),内容挺不错的,现在分享给大家,也给大家做个参考。 组件通信 几乎所有的mvvm框架中都要涉及组件通信的功能(吐槽一下knockout,毕竟是鼻祖就先不说它了)。而且目前的前端形式来看,组件化…

    2025年3月8日
    200
  • VueJS组件之间通过props交互及验证的方式

    本篇文章主要介绍了vuejs组件之间通过props交互及验证的方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 props 是父组件用来传递数据的一个自定义属性。父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用…

    2025年3月8日
    200
  • 如何解决Vue路由History mode模式中页面无法渲染

    这篇文章主要介绍了详解vue路由history mode模式中页面无法渲染的原因及解决,非常具有实用价值,需要的朋友可以参考下 Vue下路由History mode导致页面无法渲染的原因 用 Vue.js + vue-router 创建单页…

    2025年3月8日
    200
  • vue-cli构建项目反向代理配置的解析

    本篇文章主要介绍了详解vue-cli构建项目反向代理配置,内容挺不错的,现在分享给大家,也给大家做个参考。 本文介绍了vue-cli构建项目反向代理配置,分享给大家,具体如下: proxyTable: {//配置请求代理’/dlsys’:{…

    2025年3月8日
    200
  • 使用Vue自定义数字键盘组件的方法

    这篇文章主要介绍了关于使用vue自定义数字键盘组件的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 input 进行金额输入的话 体验很不好,于是…

    2025年3月8日
    200
  • vue单个组件实现无限层级多选菜单功能的介绍

    这篇文章主要介绍了vue单个组件实现无限层级多选菜单的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 wTree.vue  原理:每一个多选框都是一个节点,每个节点就是一个wTree组件,有父级(顶级level为0),有子级(底…

    编程技术 2025年3月8日
    200
  • vue 设置路由的登录权限的方法

    这篇文章主要介绍了vue 设置路由的登录权限的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 index.js 将需要登录权限的路由设置meta属性 meta:{requireAuth:true},登录后复制 main.js …

    2025年3月8日
    200

发表回复

登录后才能评论