watch(监视属性)和computed(计算属性)的区别及实现案例

 更新时间:2023年05月29日 10:26:53   作者:前端小二哥  
watch和computed是vue实例对象中的两个重要属性,watch是监视属性,用来监视vue实例对象上属性和方法的变化,computed被称为计算属性,可以将data对象中的属性进行计算得到新的属性,这篇文章主要介绍了watch(监视属性)和computed(计算属性)的区别,需要的朋友可以参考下

前言

watch 和 computed 是vue实例对象中的两个重要属性,watch是监视属性,用来监视vue实例对象上属性和方法的变化,computed被称为计算属性,可以将data对象中的属性进行计算得到新的属性;由于watch属性监视data对象中的属性变化时,也能拿到data对象中的属性进行计算;因此产生疑问既然两者都能实现同一功能,两者有什么区别呢?下面将以此疑问为突破点结合实例详述两者的区别;

watch 实现案例

  <!-- 准备好一个容器-->
    <div id="root">
      姓:<input type="text" v-model="firstName" /> <br /><br />
      名:<input type="text" v-model="lastName" /> <br /><br />
      全名:<span>{{fullName}}</span> <br /><br />
    </div>
  </body>
  <script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
    const vm = new Vue({
      el: '#root',
      data: {
        firstName: '张',
        lastName: '三',
        fullName: '张-三',
      },
      watch: {
        firstName(val) {
          setTimeout(() => {
            this.fullName = val + '-' + this.lastName
          }, 1000)
        },
        lastName(val) {
          setTimeout(() => {
            this.fullName = this.firstName + '-' + val
          }, 1000)
        },
      },
    })
  </script>

以上为watch通过监视data中的firstName和lastName的变化改变fullName

computed 实现案例

<body>
    <!-- 准备好一个容器-->
    <div id="root">
      姓:<input type="text" v-model="firstName" /> <br /><br />
      名:<input type="text" v-model="lastName" /> <br /><br />
      全名:<span>{{fullName}}</span> <br /><br />
    </div>
  </body>
  <script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
    const vm = new Vue({
      el: '#root',
      data: {
        firstName: '张',
        lastName: '三',
      },
      computed: {
        fullName() {
          return this.firstName + '-' + this.lastName
        },
      },
    })

以上为通过computed计算属性实现fullName和firstName、lastName产生联系;

对比

通过对比可以看出,watch和computed都能实现相同的功能,但是首先第一眼看去,computed计算属性实现的案例明显代码更少更精简;但是watch能将fullName的变化改成异步;因此对watch和computed属性做出如下总结:
1、computed能完成的功能watch也能完成
2、watch能完成的功能computed不一定能完成,比如watch可以进行异步操作;
📣注意:
1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。
2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数,这样this的指向才是vm 或 组件实例对象。

到此这篇关于watch(监视属性)和computed(计算属性)的区别的文章就介绍到这了,更多相关watch(监视属性)和computed(计算属性)的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue router的addRoute方法实现控制权限方法详解

    Vue router的addRoute方法实现控制权限方法详解

    这篇文章主要介绍了vue动态路由添加,vue-router的addRoute方法实现权限控制流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • Vue3中局部组件和全局组件的使用教程详解

    Vue3中局部组件和全局组件的使用教程详解

    这篇文章主要为大家学习介绍了Vue3中局部组件和全局组件的使用方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以学习一下
    2023-07-07
  • vue3如何监视Reactive对象中的属性

    vue3如何监视Reactive对象中的属性

    文章介绍了Vue.js中的`watch`函数,它可以监听不同的数据源类型,包括ref、响应式对象、getter函数和数组,文章详细说明了如何监听单个数据的属性值和多个属性值,并强调了使用getter函数的重要性,此外,还提到了深度侦听的注意事项
    2026-01-01
  • Vue动态添加class可能带来的问题解读(被覆盖)

    Vue动态添加class可能带来的问题解读(被覆盖)

    文章讨论了在使用Vue.js时,通过动态class修改元素样式时可能会遇到的问题,当通过JavaScript动态添加类时,Vue的动态class会覆盖掉通过JavaScript添加的类,导致样式丢失,这个问题在实际开发中可能会遇到,尤其是在使用第三方框架
    2024-12-12
  • vue自动添加浏览器兼容前后缀操作

    vue自动添加浏览器兼容前后缀操作

    这篇文章主要介绍了vue自动添加浏览器兼容前后缀操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Vue3中插槽slot的使用方法详解

    Vue3中插槽slot的使用方法详解

    在Vue 3中,插槽(slot)是一种强大的内容分发API,它允许组件的模板开发者定义一种插槽,下面就跟随小编一起来学习一下它的具体使用吧
    2024-11-11
  • vue自定义密码输入框解决浏览器自动填充密码的问题(最新方法)

    vue自定义密码输入框解决浏览器自动填充密码的问题(最新方法)

    这篇文章主要介绍了vue自定义密码输入框解决浏览器自动填充密码的问题,通过将密码输入框的type设置为text,修改样式上的显示,来实现既可以让浏览器不自动填充密码,又可以隐藏密码的效果,需要的朋友可以参考下
    2023-04-04
  • Vue2.4+新增属性.sync、$attrs、$listeners的具体使用

    Vue2.4+新增属性.sync、$attrs、$listeners的具体使用

    这篇文章主要介绍了Vue2.4+新增属性.sync、$attrs、$listeners的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Vue3 单文件中不同的组件

    Vue3 单文件中不同的组件

    在Vue 3的单文件组件(.vue 文件)中,组件可以从多个层面来理解,下面我将详细说明哪些部分算是组件,以及如何识别它们,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • 详解vue 计算属性与方法跟侦听器区别(面试考点)

    详解vue 计算属性与方法跟侦听器区别(面试考点)

    这篇文章主要介绍了详解vue 计算属性与方法跟侦听器区别(面试考点),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论