当前位置: 首页 > news >正文

vue中watch的详细用法,带deep,immediate

watch 的一个特点是,最初绑定的时候是不会执行的,要等到 监听的属性 改变时才执行监听计算。那我们想要一开始就让他最初绑定的时候就执行改怎么办呢?

immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。

 

<div>
      <p>obj.a: {{obj.a}}</p>
      <p>obj.a: <input type="text" v-model="obj.a"></p>
</div>
 
new Vue({
  el: '#root',
  data: {
    obj: {
      a: 123
    }
  },
  watch: {
    obj: {
      handler(newName, oldName) {
         console.log('obj.a changed');
      },
      immediate: true
    }
  } 
})

 

当我们在在输入框中输入数据视图改变obj.a的值时,我们发现是无效的。受现代 JavaScript 的限制 (以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。

默认情况下 handler 只监听obj这个属性它的引用的变化,我们只有给obj赋值的时候它才会监听到,比如我们在 mounted事件钩子函数中对obj进行重新赋值:

mounted: {
  this.obj = {
    a: '456'
  }
}

相反,如果我们需要监听obj里的属性a的值呢?这时候deep属性就派上用场了!

 

watch: {
  obj: {
    handler(newName, oldName) {
      console.log('obj.a changed');
    },
    immediate: true,
    deep: true
  }
} 

 

deep的意思就是深入观察,监听器会一层层的往下遍历,给对象的所有属性都加上这个监听器,但是这样性能开销就会非常大了,任何修改obj里面任何一个属性都会触发这个监听器里的 handler。

 

watch: {
  'obj.a': {
    handler(newName, oldName) {
      console.log('obj.a changed');
    },
    immediate: true,
    // deep: true
  }
}

 

这样Vue.js才会一层一层解析下去,直到遇到属性a,然后才给a设置监听函数。

相关文章:

  • VScode ctrl+鼠标左键点击 无法定位的问题
  • 正则 校验英文逗号字符串
  • 修改window本地hosts文件,修改域名指向
  • express中处理json数据
  • vue watch 监听对象的某个属性
  • axios上传的时候,.then,.catch都触发了
  • input上传文件选择同一文件时change事件不生效解决方法
  • vue数据变了,视图没有更新解决方法
  • 详解elementUI中input框无法输入的问题
  • vue实现表单未编辑或未保存离开弹窗提示功能
  • vue中父组件异步获取数据给子组件传参
  • 如何打造一个属于自己的命令行工具
  • git bash使用vue-cli创建项目无法切换选项
  • 线程和进程的区别是什么?
  • vue中的mixins(混入)使用场景介绍
  • 【comparator, comparable】小总结
  • C语言笔记(第一章:C语言编程)
  • Java程序员幽默爆笑锦集
  • Java到底能干嘛?
  • Joomla 2.x, 3.x useful code cheatsheet
  • nfs客户端进程变D,延伸linux的lock
  • ucore操作系统实验笔记 - 重新理解中断
  • vue数据传递--我有特殊的实现技巧
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 数据可视化之 Sankey 桑基图的实现
  • 我建了一个叫Hello World的项目
  • 我是如何设计 Upload 上传组件的
  • 写给高年级小学生看的《Bash 指南》
  • 用element的upload组件实现多图片上传和压缩
  • 阿里云服务器如何修改远程端口?
  • ​2020 年大前端技术趋势解读
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • ${ }的特别功能
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (pytorch进阶之路)扩散概率模型
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)SpringBoot3---尚硅谷总结
  • (译) 函数式 JS #1:简介
  • (转)负载均衡,回话保持,cookie
  • (转载)Linux 多线程条件变量同步
  • (轉)JSON.stringify 语法实例讲解
  • **python多态
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net 反编译_.net反编译的相关问题