【vue教程】四. Vue 计算属性和侦听器

本章涵盖知识点

  • 计算属性(computed)的使用场景
  • 侦听器(watchers)的原理和应用
  • 生命周期钩子函数

回顾


在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


计算属性(Computed)

计算属性是基于它们的依赖进行缓存的属性。只有当依赖发生变化时,计算属性才会重新计算。

创建计算属性

new Vue({
  data: {
    firstName: "John",
    lastName: "Doe",
  },
  computed: {
    fullName: function () {
      return this.firstName + " " + this.lastName;
    },
  },
});

计算属性的多样性

计算属性不仅限于简单的字符串拼接,它们可以用于执行任何类型的计算,包括对象属性的读取、复杂表达式的计算等。

计算属性的数组过滤
computed: {
  filteredList: function () {
    return this.items.filter(item => item.isVisible);
  }
}
计算属性的复杂表达式
computed: {
  priceWithTax: function () {
    return this.itemPrice * 1.05; // 假设税率为5%
  }
}

计算属性 vs 方法

  • 计算属性是惰性的,只有当依赖发生变化时才会重新计算。它们适用于不需要进行复杂逻辑处理的场合。
  • 方法(methods)每次调用都会执行,适合进行逻辑处理,如 API 请求或异步操作。

计算属性的实例演示

假设我们有一个TodoList组件,我们需要计算已完成的任务数量:

computed: {
  completedTodosCount: function () {
    return this.todos.filter(todo => todo.completed).length;
  }
}

侦听器(Watchers)

侦听器用于观察和响应 Vue 实例上的数据变化。

创建侦听器

new Vue({
  data: {
    username: "",
  },
  watch: {
    username: function (newVal, oldVal) {
      console.log(`Username changed from ${oldVal} to ${newVal}`);
    },
  },
});

侦听器的高级用法

侦听器可以接受选项,如deepimmediate等,以实现更复杂的观察逻辑。

侦听器的深度观察
watch: {
  'user.name': {
    handler: function (newVal, oldVal) {
      // 深度观察user对象中的name属性
    },
    deep: true
  }
}
侦听器的立即执行
watch: {
  searchQuery: {
    handler: 'search',
    immediate: true
  }
},
methods: {
  search: function () {
    // 这个方法将在watcher被创建后立即执行
  }
}

侦听器的实例演示

假设我们需要在用户输入搜索关键词后,从服务器获取搜索结果:

watch: {
  searchQuery: function (newVal, oldVal) {
    if (newVal === oldVal) return;
    this.fetchSearchResults(newVal);
  }
},
methods: {
  fetchSearchResults: function (query) {
    // 发起请求获取搜索结果
  }
}

生命周期钩子函数

Vue 实例的生命周期钩子允许你在实例的生命周期过程中执行代码。

生命周期钩子详解

每个生命周期钩子在 Vue 实例的不同阶段调用,下面是每个钩子的详细说明和示例代码:

  • beforeCreate: 在实例初始化之后,数据观测和事件/侦听器的配置之前被调用。

    new Vue({
      beforeCreate: function () {
        console.log("实例尚未创建");
      },
    });
    
  • created: 实例已经创建完成,但是el属性还没有被处理,datamethods已经可以访问。

    new Vue({
      created: function () {
        console.log("实例已创建,但尚未挂载到DOM");
      },
    });
    
  • beforeMount: 在挂载开始之前被调用,相关的el已经被创建,但是尚未开始渲染过程。

    new Vue({
      el: "#app",
      beforeMount: function () {
        console.log("挂载过程即将开始");
      },
    });
    
  • mounted: 实例已经挂载到 DOM 上,data已经渲染到 DOM,此时可以访问到 DOM 元素。

    new Vue({
      el: "#app",
      mounted: function () {
        console.log("实例已经挂载到DOM");
      },
    });
    
  • beforeUpdate: 数据更新时,虚拟 DOM 重新渲染和打补丁之前调用。

    new Vue({
      data: {
        message: "Hello",
      },
      beforeUpdate: function () {
        console.log("数据更新前");
      },
    });
    
  • updated: 数据更新后,虚拟 DOM 重新渲染和打补丁后调用。

    new Vue({
      data: {
        message: "Hello",
      },
      updated: function () {
        console.log("数据更新完成");
      },
    });
    
  • beforeDestroy: 实例销毁之前调用,实例仍然完全可用。

    new Vue({
      beforeDestroy: function () {
        console.log("实例销毁前");
      },
    });
    
  • destroyed: 实例销毁后调用,datamethods都不可访问。

    new Vue({
      destroyed: function () {
        console.log("实例已经销毁");
      },
    });
    

结语

本文详细介绍了 Vue 的计算属性和侦听器,以及生命周期钩子函数。计算属性提供了一种声明性描述一个值是如何根据组件中其他数据计算得来的方式,侦听器允许我们对数据的变化做出响应,而生命周期钩子函数则让我们可以在 Vue 实例的不同阶段执行特定的逻辑。在下一篇文章中,我们将探讨 Vue 的路由管理,包括 Vue Router 的配置和使用。

欢迎在文章下方留言,分享学习 Vue 计算属性、侦听器和生命周期钩子函数的心得体会,或提出在学习过程中遇到的问题。我们将在后续的文章中提供解答和指导。


  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziyu_jia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值