• Vue计算属性computed和监听watch


    1.计算属性

    初衷:为了解决模块里面有太多的计算逻辑让模版难以维护。

    计算属性可以依赖一个数据也可以依赖多个数据的变化

    使用场景:

    商品单价和数量改变时,商品总价更改。如果写在方法里面,那么每次修改商品单价和数量时都会去调用这个方法,这种每次去调用都会消耗一部分性能,对页面渲染并不友好。所以就可以使用计算属性,计算属性可以使用缓存

    2.计算属性的setter

    计算属性不能在外部直接进行赋值,如果想要给计算属性赋值,就需要使用set/get方法,而且计算属性里面使用对象写法。

    如购物车里面商品,全选按钮会根据商品是否全选中来决定是否被选中

    1. "mini" v-model="checkedAll">
    2. checkedAll: {
    3. get() {
    4. return this.cartProducts.every(item => item.isChecked);
    5. },
    6. set(newVal) {
    7. this.cartProducts.map(item => (item.isChecked = newVal));
    8. }
    9. }

    3.计算属性的特性

    1. 计算属性会被加入到vue实例

    2. 计算属性所依赖的数据未发生变化,结果会被缓存(缓存依赖于数据的变化,数据没有变化不会缓存),下一次页面更新时首先会查看数据是否变化,如果没有变化不会触发computed函数会直接读取缓存的内容

    4.watch监听器

    监听器适用于数据发生改变时做一些副作用相关的处理

    5.watch相关api

    • 可以监听data数据中的变量
    • 监听属性的方法,可以是methods里的方法名
    • 可以使用deep:true对对象进行深度监听
    • 可以使用immediate: true在页面首次加载时就触发
    • 可以传入回调数组,它们会被按顺序逐一调用
    • 可以只监听对象的某个属性 obj.a
    1. var vm = new Vue({
    2. data: {
    3. a: 1,
    4. b: 2,
    5. c: 3,
    6. d: 4,
    7. e: {
    8. f: {
    9. g: 5
    10. }
    11. }
    12. },
    13. watch: {
    14. a: function (val, oldVal) {
    15. console.log('new: %s, old: %s', val, oldVal)
    16. },
    17. // 方法名
    18. b: 'someMethod',
    19. // 该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深(对对象的深度监听)
    20. c: {
    21. handler: function (val, oldVal) { /* ... */ },
    22. deep: true
    23. },
    24. // 该回调将会在侦听开始之后被立即调用(页面加载时就触发)
    25. d: {
    26. handler: 'someMethod',
    27. immediate: true
    28. },
    29. // 你可以传入回调数组,它们会被按顺序逐一调用
    30. e: [
    31. 'handle1',
    32. function handle2 (val, oldVal) { /* ... */ },
    33. {
    34. handler: function handle3 (val, oldVal) { /* ... */ },
    35. /* ... */
    36. }
    37. ],
    38. // watch vm.e.f's value: {g: 5}(只监听对象的某个属性)
    39. 'e.f': function (val, oldVal) { /* ... */ }
    40. },
    41. methods:{
    42. someMethod(){
    43. console.log("methods方法中监听");
    44. }
    45. }
    46. })
    47. vm.a = 2 // => new: 2, old: 1

    6.watch可以处理异步

    watch内部可以处理异步相关逻辑

    7.计算属性computed和监听watch的区别

    • 计算属性会进行缓存,缓存是由数据变化决定。在页面下一次更新时,首先会查看里面的字段是否有变化,如果字段没有变化,则不会触发会computed函数从上一次缓存中读取数据;而watch不会进行缓存;
    • 计算属性computed因为有return所以不能处理异步相关逻辑;而watch可以处理异步相关逻辑
    • computed首次加载就会触发缓存里面的内容,但是watch如果要首次加载就触发需要使用immediate:true属性;
    • computed会对对象进行深度监听,但是如果watch想进行深度监听需要使用deep:true属性
  • 相关阅读:
    智能家居相关企业达2万余家,湖南智能家居发展将进入快车道
    C语言求一维数组循环左移一位
    ThingsBoard教程(二八):详细讲解在tb平台下 mqtt协议下的 rpc 遥测,客户端rpc,服务的rpc的使用 ,与node-red联动
    周记-20220827
    NNLM、RNNLM等语言模型 实现 下一单词预测(next-word prediction)
    Ubuntu系统的k8s常见的错误和解决的问题
    python字符串相关
    FPGA基础 - 1
    Apifox--比 Postman 还好用的 API 测试工具
    Ajax使用流程
  • 原文地址:https://blog.csdn.net/qq_34569497/article/details/133960209