watch 和 computed 对比-姓名案例

news/2024/7/9 23:49:30 标签: vue

文章目录

  • watch 实现
  • computed 实现

在这里插入图片描述

watch 实现

<div id="root">
    姓:<input type="text" v-model="firstName"><br/><br/>
    名:<input type="text" v-model="lastName"><br/><br/>
    全名:<span>{{fullName}}</span>
</div>
new Vue({
        el: '#root',
        data: {
            firstName: '张',
            lastName: '三',
            fullName: '张-三'
        },
        watch: {
            firstName(val) {
                this.fullName = val + this.lastName
            },
            lastName(val) {
                this.fullName = this.firstName + val
            }
        }
    })

computed 实现

<div id="root">
    姓:<input type="text" v-model="firstName"><br/><br/>
    名:<input type="text" v-model="lastName"><br/><br/>
    全名:<span>{{fullName}}</span>
</div>
new Vue({
        el: '#root',
        data: {
            firstName: '张',
            lastName: '三',
        },
        computed: {
            fullName() {
                return this.firstName + '-' + this.lastName
            }
        }
    })

现在看起来是计算属性更方便,但某些情况只有监视属性才能做到,比如当修改姓或名后延迟一秒种改变

watch: {
            firstName(val) {
                setTimeout(() => {
                    this.fullName = val + '-' + this.lastName
                }, 1000);
            },
            lastName(val) {
                this.fullName = this.firstName + '-' + val
            }
        }

而计算属性不可以,因为计算属性是靠返回值的,不能开启异步任务

另外还有一个细节,这里的定时器是箭头函数,因为定时器是js管理的,而不是vm,如果写普通函数,setTimeout 里的 this 是 window,如果写成箭头函数,就没有了自己的 this,会向外找,就变成了 vm

			firstName(val) {
                setTimeout(() => {
                    this.fullName = val + '-' + this.lastName
                }, 1000);
            },

computed 和 watch 之间的区别
1、computed 能完成的功能,watch 都可以完成
2、watch 能完成的功能,computed 不一定能完成,例如: watch 可以进行异步操作

两个重要的小原则
1、所被Vue管理的函数,最好写成普通函数,这样 this 的指向才是 vm 或组件实例对象
⒉、所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数、promise的回调函数等),最好写成箭头函数,这样 this 的指向才是 vm 或组件实例对象。


http://www.niftyadmin.cn/n/1816769.html

相关文章

sql 利用索引优化性能

人们在使用sql时往往会陷入一个误区&#xff0c;即太关注于所得的结果是否正确&#xff0c;而忽略了不同的实现方法之间可能存在的性能差异&#xff0c;这种性能差异在大型的或是复杂的数据库环境中&#xff08;如联机事务处理oltp或决策支持系统dss&#xff09;中表现得尤为明…

宽大

这是一个来自越战归来的士兵的故事。他从旧金山打电话给他的父母&#xff0c;告诉他们&#xff1a;「爸妈&#xff0c;我回来了&#xff0c;可是我有个不情之请。我想带一个朋友同我一起回家。」「当然好啊&#xff01;」他们回答「我们会很高兴见到的。」不过儿子又继续下去「…

Vue 绑定样式

文章目录绑定class样式style 绑定样式scoped绑定class样式 1、字符串写法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue初识</title><script type"text/javascript" src&…

Vue 条件渲染

文章目录v-showv-ifv-else-ifv-elsev-if 与 template总结v-show <!--使用v-show做条件渲染--><h1 v-show"false">{{name}}</h1><!--或--><h1 v-show"13">{{name}}</h1>举例1 <div id"root"><h2&…

永远不要跟父母说的十句话,谁没说过?

一辈子把我们培养成人不容易&#xff01;我们绝不应该对他们说出以下的十句话&#xff1a; 1、好了&#xff0c;好了&#xff0c;知道&#xff0c;真罗嗦&#xff01; 2、有事吗&#xff0c;没事&#xff1f;那挂了啊。 &#xff08;父母打电话&#xff0c;也许只想说说…

Vue 列表过滤、列表排序

文章目录数据过滤watch实现computed 实现列表排序数据更新的一个问题Vue.set 方法Vue监视数据的原理综合练习数据过滤 watch实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue初识</title&…

我的第一个web service程序(原创)

程序功能&#xff1a;为联想渠道备件管理系统(SDM)提供上传和查看SLA附件&#xff0c;SDM系统服务器在一台机器上,要求附件保存在另一个文件系统服务器上&#xff0e; 程序运行背景&#xff1a; 本机&#xff08;10.99.58.101&#xff09;的默认网站&#xff08;即localhost&am…

中美售后服务的巨大反差让我震惊

佚名&#xff0f;看到这个题目&#xff0c;有很多所谓的"爱国人士"和"美国掌故"又有牢骚了&#xff0c;但是我还是要写这篇文章&#xff0c;这是我两次亲身经历的美国售后服务--如此迅速和高效&#xff0c;和中国的售后服务分明是两个完全不同的标准&#…