1、watch钩子函数监听数据的变化

watch 的一个特点是,最初绑定的时候是不会执行的(firstName的值在data定义时赋予的值),要等到 firstName 改变时才执行监听计算。

<div>
<p>FullName: {{fullName}}</p>
<p>FirstName: <input type="text" v-model="firstName"></p>
</div>new Vue({el: '#root',data: {firstName: 'Dawei',lastName: 'Lou',fullName: ''
},
watch: {firstName(newName, oldName) {this.fullName = newName + ' ' + this.lastName;}}
})

handler方法和immediate属性

这时候需要增加immediate属性,设置为true,如果不需要就设置false,那就是初始化不会监听变化,这时候需要将watch部分的代码修改如何

watch: {firstName: {handler(newName, oldName) {this.fullName = newName + ' ' + this.lastName;},// 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法immediate: true}
}

应用场景:

可以只用watch来监听数据的变化实时更新数据的变化

<template><input v-model="value" /> // 搜索框
</template>
<script>
export default {data(){return {value: '' // 值}},watch:{value(val){ // 实时监听数据变化this.wat_fun(val)}}, methods:{wat_fun(val){ // 这里可以调用搜索api接口console.log(val)}}
}
</script

2、computed钩子函数监听数据的变化

 读取computed里面的值还是用this.changeVal

3、watch和computed各自处理的数据关系场景不同 (来源于)
知识点1:watch擅长处理的场景:一个数据影响多个数据
知识点2:computed擅长处理的场景:一个数据受多个数据影响

对于watch,我们先从一个场景说起
在《海贼王》里面,主角团队的名称叫做:“草帽海贼团”
所以我们把船员依次称为:
草帽海贼团索隆,草帽海贼团娜美,以此类推。。。
我们希望:当船团名称发生变更的时候,这艘船上所有船员的名字一起变更!!
例如:
有一天,船长路飞为了加强团队建设,弘扬海贼文化,决定“草帽海贼团”改名为“橡胶海贼团”(路飞是橡胶恶魔果实能力者)
我们代码如下:

 var vm = new Vue({el: '#app',/*data选项中的数据:1.haiZeiTuan_Name --> 海贼团名称2.船员的名称 = 海贼团名称(草帽海贼团) + 船员名称(例如索隆)这些数据里存在这种关系:(多个)船员名称数据 --> 依赖于 --> (1个)海贼团名称数据一个数据变化 ---> 多个数据全部变化*/data: {haiZeiTuan_Name: '草帽海贼团',suoLong: '草帽海贼团索隆',naMei: '草帽海贼团娜美',xiangJiShi: '草帽海贼团香吉士'},/*在watch中,一旦haiZeiTuan_Name(海贼团名称)发生改变data选项中的船员名称全部会自动改变 (suoLong,naMei,xiangJiShi)并把它们打印出来*/watch: {haiZeiTuan_Name: function (newName) {this.suoLong = newName + '索隆'this.naMei = newName + '娜美'this.xiangJiShi = newName + '香吉士'console.log(this.suoLong)console.log(this.naMei)console.log(this.xiangJiShi)}}
})// 更改watch选项中监控的主数据
vm.haiZeiTuan_Name = '橡胶海贼团'demo:于是船员们的称号前缀都被统一修改了!(原本是“草帽海贼团”)
但是我们的路飞船长又突发奇想:我这么喜欢吃肉,干脆我们叫做“肉肉海贼团”好了吧!
我们把最下面的代码改为:
// 更改watch选项中监控的主数据
vm.haiZeiTuan_Name = '肉肉海贼团'
demo:computed擅长处理的场景:一个数据受多个数据影响我们再从一个场景说起
路飞的全名叫做:蒙奇-D-路飞,他想成为海贼王,但路飞的爷爷卡普(海军英雄)因此感到非常恼怒,于是把“路飞”改成了叫“海军王”,希望他能改变志向
代码如下:
var vm = new Vue({el: '#app',/*data选项中的数据:firstName,secName,thirdNamecomputed监控的数据:lufei_Name两者关系: lufei_Name = firstName + secName + thirdName所以等式右边三个数据任一改变,都会直接修改 lufei_Name*/data: {// 路飞的全名:蒙奇·D·路飞firstName: '蒙奇',secName: 'D',thirdName: '路飞'},computed: {luFei_Name: function () {return this.firstName + this.secName + this.thirdName}}
})// 将“路飞”改为“海军王”
vm.thirdName = '海军王'
// 打印路飞的全名
console.log(vm.luFei_Name)
demo:但是:
有一天,路飞的逗逼爷爷卡普,一不小心发现可能把族谱搞错了,实际上,他们不是“D”之一族,而是“H”一族,也就是说,“蒙奇-D-路飞”可能要叫做“蒙奇-H-路飞”了
将最后一段代码改为如下:
// 将“D”改为“H”
vm.secName = 'H'
// 打印路飞的全名
console.log(vm.luFei_Name)
demo:methods不处理数据逻辑关系,只提供可调用的函数
相比于watch/computed,methods不处理数据逻辑关系,只提供可调用的函数
new Vue({el: '#app',template: '<div id="app"><p>{{ say() }}</p></div>',methods: {say: function () {return '我要成为海贼王'}}
})

总结:

computed 在数据未发生变化时,优先读取缓存。computed 计算属性只有在相关的数据发生变化时才会改变要计算的属性,当相关数据没有变化时,它会读取缓存。而不必想 motheds方法 和 watch 方法是的每次都去执行函数。

vue生命周期学习(watch跟computed)相关推荐

  1. 详解vue生命周期(重点!!)

    首先,每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期.首先看一张图吧~这是官方文档上的图片相信大家一定都会很熟悉:   可以看出在vue--整个的生命周期中会有很多 ...

  2. Vue 生命周期记录_学习笔记

    官方给出的设计图入戏 为了能更好的理解这个图呢,写了下面的demo <!DOCTYPE html> <html><head><meta charset=&qu ...

  3. 少侠请重新来过 - Vue学习笔记(二) - Vue生命周期

    Vue 生命周期和钩子 每一个vue实例创建时,会经历一段初始化的过程,同时会调用其生命周期钩子,实例的钩子this指向它的Vue实例,不需要在钩子用箭头函数. <template>< ...

  4. Vue 学习笔记(2)Vue 生命周期、组件

    Vue Vue 生命周期 Vue 中组件(Component) 全局组件的开发 局部组件的开发 组件中 props 的使用 在组件上声明静态数据传递给组件内部 在组件上声明动态数据传递给组件内部 pr ...

  5. vue生命周期整理学习

    生命周期图如下: 生命周期过程: 生命周期过程中,首先创建vue实例,然后初始化事件并监测数据.在created阶段之前就完成了数据的监测(这个阶段data和data的属性已存在,但是el未初始化) ...

  6. Vue学习 — 详解Vue生命周期

    目录 一.前言 二.生命周期 1.beforeCreat / created (1).beforeCreat: (2).created: 2.eforeMount / mounted (1).befo ...

  7. 一文带你吃透Vue生命周期(结合案例通俗易懂)

    文章目录 本篇学习目标 1. vue生命周期 1.0_人的-生命周期 1.1_钩子函数 1.2_初始化阶段 1.3_挂载阶段 1.4_更新阶段 1.5_销毁阶段 2. axios 2.0_axios基 ...

  8. vue 生命周期_Vue生命周期小白看了都会的

    最近一直在学习Vue,而vue生命周期是我们不可能绕开的一个很核心的知识点,今天来简单的梳理一下大概的内容. 一.钩子函数 在一开始学习的时候,总有钩子函数这个名词冒出来,而且在vue官网文档中也频繁 ...

  9. 浅谈vue —— 生命周期

    记于vue生命周期的学习 每个 Vue 实例在被创建时都要经过一系列的初始化过程--例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行一些 ...

  10. Vue生命周期中钩子函数理解简记

    Vue生命周期钩子函数 钩子函数 beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroy ...

最新文章

  1. 腾讯广告广点通API接入文档(Android)
  2. 什么是启发式?什么是产生式?
  3. mos管结电容等效模型_MOS管硬开关震荡分析“新能源汽车与电力电子技术”系列之十九...
  4. 手游为什么要热更新,C#为什么不能热更新,LUA为什么可以
  5. 哪个网站是计算机知识的,电脑知识网站
  6. [投资习惯对比]投资大师vs失败投资…
  7. 18春东大计算机在线作业3,东大18春学期《计算机辅助数控编程》在线作业3.docx...
  8. Qt程序等待/睡眠的正确方法
  9. Response.Redirect 产生的“正在中止线程”错误
  10. 华为鸿蒙麒麟玉兔_华为P50Pro概念图:1亿像素+麒麟9000+鸿蒙
  11. 大学英语综合教程四 Unit 6 课文内容英译中 中英翻译
  12. python3.x中如何使用base64、base32、base16编码解码
  13. close 和 shutdown 的差别
  14. PyTorch搭建LSTM实现多变量多步长时间序列预测(四):多模型滚动预测
  15. 《中国医学大成》目录
  16. ROS2与C++入门教程-在C++包里增加python支持
  17. 数据分类分级方法及典型应用场景
  18. 如何在VC中调用第三方lib库(step by step)
  19. win10安装MinGW-64
  20. 索尼文化变革催生低端DV

热门文章

  1. 快手申请快手联盟商选商标,商标注册的申请程序有哪些?
  2. 【技术贴】ppt2003更换图片|更换带有动作特效的图片|替换ppt图片
  3. 证明费马最后定理的英国数学家,终获2016阿贝尔奖
  4. 刚入行的软件测试工程师如何自学软件测试?
  5. CentOS 7.6基于lvm2快照备份恢复MariaDB
  6. 数据分类算法-朴素贝叶斯
  7. 值得看三次的高干文_6本好看的高干文推荐,每本都值得看三次!
  8. 计算机与音乐整合的教学设计,信息技术与学科教学整合音乐课教学设计  2010年10月  田赞禄...
  9. 简单实现网站灰色效果以谨记2020年4月4日悼念日
  10. 古诗文登录验证码识别及登录