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

vue入门到实战 二

目录

2.1 计算属性computed

2.1.1什么是计算属性

2.1.2 只有getter方法的计算属性 

2.1.3 定义有getter和setter方法的计算属性

2.1.4 计算属性和methods的对比 

2.2 监听器属性watch

2.2.1 watch属性的用法

2.2.2 computed属性和watch属性的对比


2.1 计算属性computed

Vue模板的插值表达式过长或逻辑过于复杂时,表达式将变得臃肿甚至难以阅读和维护,例如:{ { textData.split(',').reverse().splice(0, 1) }}。这里的表达式包含3个操作方法,并不是很清晰,这时可以使用计算属性解决。

2.1.1什么是计算属性

Vue实例的computed选项中,定义一些属性(可使用this引用),这些属性称作“计算属性”。所有的计算属性都是以方法(函数)的形式定义,但仅当作属性来使用。

 现在我们看另外一个使用场景:如果有个变量c的数据,来源a和b,a和b修改,c也会跟着修改,这时候就可以用上计算属性computed

2.1.2 只有getter方法的计算属性 

 在一个计算属性中可以完成各种复杂的逻辑,包括运算、方法调用等,但最终必须返回一个结果。计算属性的结果还可以依赖于多个数据,只要其中任一数据发生变化,计算属性将重新执行,视图也会更新。

2.1.3 定义有gettersetter方法的计算属性

Vue的每一个计算属性都包含一个getter和一个setter方法,我们只是使用了计算属性的默认用法,即仅使用了getter方法来读取计算属性。当然,也可以使用计算属性的setter方法来修改其值。

现在我们修改下数据

2.1.4 计算属性和methods的对比 

可以在表达式中调用方法达到与计算属性同样的效果,我们可以看出计算属性是带缓存功能的,methods是没有缓存功能的,我们看下图fullname复制三次,但是fullname的get方法并没有打印三次

2.2 监听器属性watch

2.2.1 watch属性的用法

Vue通过watch选项提供监听数据属性的方法(方法名与属性名相同),来响应数据的变化。当被监视的数据发生变化时,触发watch中对应的处理方法。

使用watch属性监视dataquestion的变化(watch中需提供与question同名的方法)

案例一 监测简单数据

案例二 监听对象

 深度监听虽然可以监听到对象的变化,但是无法监听到具体的是哪个属性发生变化了。

案例三 监控单个对象

2.2.2 computed属性和watch属性的对比

  • computed 监控的数据在 data 中没有声明
  • computed 不支持异步,当 computed 中有异步操作时,无法监听数据的变化
  • computed 具有缓存,页面重新渲染,值不变时,会直接返回之前的计算结果,不会重新计算
  • 如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,一般使用 computed
  • computed 计算属性值是函数时,默认使用get方法。如果属性值是属性值时,属性有一个get和set方法,当数据发生变化时会调用set方法。
  • ----------------------------------------------------------------------------------------------------------------
  • 监测的数据必须在 data 中声明或 props 中数据
  • 支持异步操作
  • 没有缓存,页面重新渲染时,值不改变时也会执行
  • 当一个属性值发生变化时,就需要执行相应的操作
  • 监听数据发生变化时,会触发其他操作,函数有两个参数:
  • immediate :组件加载立即触发回调函数 deep:深度监听,主要针对复杂数据,如监听对象时,添加深度监听,任意的属性值改变都会触发。 注意:对象添加深度监听之后,输出的新旧值是一样的。

2.3 应用场景

当需要进行数值计算,并且依赖于其它数据时,应该使用 computed ,因为可以利用 computed 的缓存特性,避免每次获取值时都要重新计算。

当需要在数据变化时执行异步操作或开销较大的操作时,应该使用 watch,computed 不支持异步。如果需要限制执行操作的频率,可借助 computed 作为中间状态。


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

相关文章:

  • 基于单片机的盲人智能水杯系统(论文+源码)
  • 携程Android开发面试题及参考答案
  • 87.(3)攻防世界 web simple_php
  • 【3】阿里面试题整理
  • 如何用KushoAI提升API自动化测试效率:AI驱动的革命
  • Elasticsearch Queries
  • 实战技巧:如何快速提高网站收录的多样性?
  • Baklib在企业知识管理领域的领先地位与三款竞品的深度剖析
  • 函数与递归
  • vue2和vue3路由封装及区别
  • 蛇年说蛇,革旧图新
  • VSCode插件HTML CSS Support
  • MyBatis-Plus笔记-快速入门
  • 于动态规划的启幕之章,借 C++ 笔触绘就算法新篇
  • 深度学习模型在汽车自动驾驶领域的应用
  • 二叉树——429,515,116
  • 031.关于后续更新和指纹浏览器成品
  • HTB:Alert[WriteUP]
  • 实现C语言的原子操作
  • 【机器学习】自定义数据集,使用scikit-learn 中K均值包 进行聚类
  • 第12章:基于TransUnet和SwinUnet网络实现的医学图像语义分割:腹部13器官分割(网页推理)
  • 成绩案例demo
  • 【FreeRTOS 教程 七】互斥锁与递归互斥锁
  • Java 中的 function 接口像一件艺术品
  • BUUCTF_[羊城杯2020]easyphp(构造特殊文件名,字符串拼接绕过/正则表达式/代码审计)
  • 【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具02