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

vue 监听器及计算属性高阶用法

文章目录

  • 监听器的高级用法
    • 深度监听
    • 立即触发
  • 计算属性的高级用法
    • Getter 和 Setter
    • 缓存策略
    • 计算属性的依赖
  • 总结

在这里插入图片描述

监听器的高级用法

深度监听

默认情况下,Vue.js 的监听器只会监听对象或数组的第一层属性变化,而不会深度监听其嵌套的属性变化。但是,在某些情况下,我们需要深度监听对象或数组中的所有属性变化。这时,我们可以使用deep选项来设置深度监听。

例如,假设我们有以下数据:

data: {
  user: {
    name: 'John',
    age: 30,
    address: {
      city: 'New York',
      state: 'NY'
    }
  }
}

如果我们需要深度监听user对象中的所有属性,包括其嵌套的属性,可以使用以下代码:

watch: {
  'user': {
    handler: function (val, oldVal) { /* ... */ },
    deep: true
  }
}

这样,当user对象中任何一个属性发生变化时,都会触发监听器。

立即触发

默认情况下,Vue.js 的监听器是在被监听的属性发生变化后才会触发。但是,在某些情况下,我们需要在监听器创建时立即触发一次监听器函数(handler)。这时,我们可以使用immediate选项来设置立即触发监听器。

例如,假设我们有以下数据:

data: {
  counter: 0
}

如果我们需要在监听器创建时就立即触发一次监听器函数,可以使用以下代码:

watch: {
  'counter': {
    handler: function (val, oldVal) { /* ... */ },
    immediate: true
  }
}

这样,当监听器创建完成后,就会立即触发一次监听器函数。

计算属性的高级用法

Getter 和 Setter

默认情况下,计算属性只有 getter 函数,它用于计算出一个新的值。但是,在某些情况下,我们也需要一个 setter 函数,用于更新计算属性所依赖的原始数据。这时,我们可以使用get和set选项来设置 getter 和 setter 函数。

例如,假设我们有以下数据:

data: {
  firstName: 'John',
  lastName: 'Doe'
}

如果我们需要定义一个计算属性fullName,它的值为firstName和lastName的组合,并且我们希望可以通过fullName来更新firstName和lastName,可以使用以下代码:

computed: {
  fullName: {
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}

这样,我们就可以通过fullName计算出一个新的值,并且也可以通过设置fullName来更新原始数据。

缓存策略

默认情况下,Vue.js 的计算属性是具有缓存策略的。这意味着,只有当计算属性依赖的原始数据发生变化时,才会重新计算该属性的值。但是,在某些情况下,我们需要禁用缓存策略,保证每次访问计算属性时都重新计算该属性的值。这时,我们可以使用cache选项来设置缓存策略。

例如,假设我们有以下数据:

data: {
  counter: 0
}

如果我们需要定义一个计算属性timestamp,它的值为当前时间戳,并且我们希望每次访问timestamp都重新计算该属性的值,可以使用以下代码:

computed: {
  timestamp: {
    get: function () {
      return Date.now()
    },
    cache: false
  }
}

这样,每次访问timestamp时,都会重新计算该属性的值。

计算属性的依赖

默认情况下,计算属性会自动追踪其所依赖的原始数据,并在其所依赖的原始数据发生变化时重新计算属性的值。但是,在某些情况下,我们需要手动指定计算属性所依赖的原始数据。这时,我们可以使用watch选项来监听原始数据的变化,并在变化时手动更新计算属性的值。

例如,假设我们有以下数据:

data: {
  firstName: 'John',
  lastName: 'Doe'
}

如果我们需要定义一个计算属性fullName,它的值为firstName和lastName的组合,并且我们希望在firstName或lastName发生变化时手动更新fullName的值,可以使用以下代码:

computed: {
  fullName: function () {
    return this.firstName + ' ' + this.lastName
  }
},
watch: {
  firstName: function () {
    this.fullName = this.firstName + ' ' + this.lastName
  },
  lastName: function () {
    this.fullName = this.firstName + ' ' + this.lastName
  }
}

这样,每当firstName或lastName发生变化时,就会手动更新fullName的值。

总结

监听器和计算属性是Vue.js中非常重要的特性,它们可以让我们更加方便地监控和处理数据的变化。在本文中,我们探讨了监听器和计算属性的高级用法,包括深度监听、立即触发、Getter 和 Setter、缓存策略以及计算属性的依赖等。通过深入理解这些高级用法,我们可以更好地利用Vue.js提供的数据驱动功能,编写出更加灵活和高效的前端代码。


http://www.kler.cn/a/4415.html

相关文章:

  • 我的年度总结
  • 【leetcode21】344.反转字符串
  • STM32-keil安装时遇到的一些问题以及解决方案
  • MySQL 排除指定时间内重复记录的解决方案
  • day09_kafka高级
  • OpenCV的TIF红外可见光融合算法
  • vue Teleport和ref结合复用弹框组件
  • 统计字符串中每个字符出现的次数
  • C语言基础——流程控制语句
  • 深度学习的面试小记
  • VUE3 学习笔记(五)UI框架Element Plus
  • C/C++开发,编译环境搭建
  • HDFS概述
  • 查看mysql InnoDB引擎 线程模型信息
  • Modelsim仿真使用教程
  • Leetcode.1191 K 次串联后最大子数组之和
  • 数据结构之小端和大端之谜
  • Vue 点击图片放大显示功能
  • 11_nginx_document_uri
  • 信息打点-主机架构蜜罐识别WAF识别端口扫描协议识别服务安全
  • 测试开发进阶系列课程
  • 问卷中多选题该怎么分析?
  • 《毫无意义的工作》笔记——一个人的工作越明显对他人有益,他得到的酬劳就越低?
  • STM32之TIM编码器接口
  • uni-app使用uview组件中的封装
  • 【笔记】C# 泛型约束