冇事来学系--Vue2.0侦听器

简介: watch侦听器允许开发者监视数据的变化,从而针对数据的变化做出特定的操作

侦听器


watch侦听器允许开发者监视数据的变化,从而针对数据的变化做出特定的操作

语法格式
const vm = new Vue({
  el: '#app',
  data: {username: ''},
  // 所有侦听器都要定义在watch节点之下
  watch: {
    // 监听 username值的变化
    // 侦听器本质上是一个函数,要监视哪个数据的变化,就把数据名作为方法名即可
    // newVal是"变化后的新值", oldVal是"变化之前的旧值"
    username(newVal, oldVal){
      console.log(newVal, oldVal)
    }
  }
})


侦听器的格式


1.  方法格式的侦听器

  • 缺点一:无法在刚进入页面的时候自动触发侦听器
  • 缺点二:当侦听的是一个对象时,若对象里面的属性发生了变化,不会触发侦听器

2.  对象格式的侦听器

  • 优点一:可以通过immediate选项,让侦听器自动触发
  • 优点二:可以通过deep选项,让侦听器监听对象中每个属性的变化
const vm = new Vue({
  el: '#app',
  data: {username: 'admin'},      // username带默认值
  // 所有侦听器都要定义在watch节点之下
  watch: {
    // 监听 username值的变化
    username: {
      // 侦听器的处理函数handler,当username发生变化时被调用
      handler(newVal, oldVal){
      },
      immediate: true       // immediate属性,默认值为false,当为true时进入页面会立即执行一次侦听器
    }
  }
})


补充:

另一种监听的方式 vm.$watch()

当vm实例对象创建时就知道要监听哪个属性,则可以在对象内使用watch节点来写配置对象

当vm实例对象创建时还没确定好监听什么,需要后续在确定,则可以使用下面这种方法

// 在vm实例的外面
vm.$watch('属性名称', {
  // 配置对象
})
// 示例:监听username
vm.$watch('username', {
  immediate: true,
  handler(newVal, oldVal){
    console.log(newVal, oldVal)
  }
})

深度侦听(deep选项)

<div id="app">
  <input type="text" v-model="info.username">   <!-- 注意这里不能直接写username,因为data里面就没有username这个属性 -->
</div>
const vm = new Vue({
  el: '#app',
  data: {
    // 用户的信息对象
    info: {
      username: 'admin',
      pwd: 666666
    }
  },      
  watch: {
    // 监听info对象的变化
    info: {
      handler(newVal){
        console.log(newVal)
      },
      deep: true  // 开启深度侦听,只要对象中任意一个属性发生变化,就会触发 对象的侦听器
    } ,
    // 也可以直接侦听对象中某一子属性的变化,但必须用单引号包裹(其实每个属性都是引号包裹的,只不过那些都省略了)
    'info.username'(newVal){
      console.log(newVal)
    }
  }
})

注意:监听一个复杂数据类型的属性,如一个对象,在改变里面的其中一个属性时,由于这个对象的地址没有发生改变,所以在监听不到这个对象发生变化;而用一个新对象去覆盖原来的对象,这样导致的地址的改变,所以才能监听到对象发生了变化。

所以,我们需要深度监听,只要对象中任意一个属性发生变化,就会触发 对象的侦听器

目录
相关文章
|
前端开发 JavaScript Java
基于springboot的资产管理系统
该系统创作于2022年4月,包含详细数据库设计。基于springboot技术,数据层为MyBatis,mysql数据库,具有完整的业务逻辑,适合选题:资产、公司OA、企业资产等。
基于springboot的资产管理系统
|
机器学习/深度学习 数据采集 算法
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分析分类预测房价及交叉验证|数据分享
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分析分类预测房价及交叉验证|数据分享
|
Prometheus Kubernetes 监控
NVIDIA GPU Operator分析六:NVIDIA GPU Operator原理分析
背景我们知道,如果在Kubernetes中支持GPU设备调度,需要做如下的工作:节点上安装nvidia驱动节点上安装nvidia-docker集群部署gpu device plugin,用于为调度到该节点的pod分配GPU设备。除此之外,如果你需要监控集群GPU资源使用情况,你可能还需要安装DCCM exporter结合Prometheus输出GPU资源监控信息。要安装和管理这么多的组件,对于运维
3242 0
|
JavaScript
js全屏切换效果demo效果示例(整理)
js全屏切换效果demo效果示例(整理)
|
机器学习/深度学习 数据采集 数据可视化
【机器学习sklearn】简单易懂核密度估计KernelDensity
【机器学习sklearn】简单易懂核密度估计KernelDensity
1734 0
【机器学习sklearn】简单易懂核密度估计KernelDensity
|
存储
上机实验6 集合案例
上机实验6 集合案例
224 0
|
算法 Java
整理牛客网---阿里校招笔试后端Java版,dfs和算法题。
整理牛客网---阿里校招笔试后端Java版,dfs和算法题。
701 0
|
存储 中间件 Python
Scrapy框架的下载器中间件讲解&并用下载器中间件设置随机请求头
Scrapy框架的下载器中间件讲解&并用下载器中间件设置随机请求头
203 0
|
安全 关系型数据库 MySQL
超市结算系统|Springboot+Vue通用超市结算收银系统
超市结算系统|Springboot+Vue通用超市结算收银系统
634 0
超市结算系统|Springboot+Vue通用超市结算收银系统