Vue计算属性:简化数据处理和视图更新的利器

news2024/11/26 20:31:21

一、计算属性的基本使用

  • 计算属性:一个特殊属性,值依赖于另外一些数据动态计算出来。
  • 🚩🚩🚩计算属性特点:函数内使用的变量改变,重新计算结果返回。
  • 💣💣💣注意:
    ①、计算属性必须定义在computed节点中。
    ②、计算属性必须是一个function,计算属性必须有返回值。
    ③、计算属性不能被当当作方法调用,要作为属性来使用。
computed:{
	"计算属性名"(){
		return "值"
	}
}
<template>
	<div>
		<p>和为:{{ num }}</p>
	</div>
</template>
  • 计算属性也是属性, 所以不要和data里重名, 用起来也和data类似

(一)全选反选案例

在这里插入图片描述

<template>
  <div>
    <span>全选:</span>
    <input type="checkbox" v-model="ck" />
    <!-- <button >反选</button> -->
    <ul>
      <li>
        <input type="checkbox" />
        <span>名字</span>
      </li>
    </ul>
  </div>
</template>
  
<script>
export default {
  // 初始化数据
  data() {
    return {
      arr: [
        {
          name: "猪八戒",
          c: false, // 该项是否选中?
        },
        {
          name: "孙悟空",
          c: false,
        },
        {
          name: "唐僧",
          c: false,
        },
        {
          name: "白龙马",
          c: false,
        },
      ],
    };
  },
};
</script>
<style>
</style>

在这里插入图片描述

<template>
  <div>
    <span>全选:</span>
    <input type="checkbox" v-model="ck" />
    <!-- <button >反选</button> -->
    <ul>
      <li v-for="(item,i) in arr" :key="i">
        <!-- :checked="item.c" 单项数据绑定 -->
        <!-- v-model="item.c"  双向数据绑定 -->
        <input type="checkbox" v-model="item.c"/>
        <span>{{item.name}}</span>
      </li>
    </ul>
  </div>
</template>

在这里插入图片描述

📢📢📢(1)小选决定大选,大选被小选算计出来

方法一 —— forEach循环

<template>
  <div>
    <span>全选:</span>
    <input type="checkbox" :checked="bigCk" />
    <!-- <button >反选</button> -->
    <ul>
      <li v-for="(item, i) in arr" :key="i">
        <!-- :checked="item.c" 单项数据绑定 -->
        <!-- v-model="item.c"  双向数据绑定 -->
        <input type="checkbox" v-model="item.c" />
        <span>{{ item.name }}</span>
      </li>
    </ul>
  </div>
</template>
  
<script>
// s四个小选----->决定大选
// 1.四个小选状态,都选中!大选框也要选中!否则,不能选中
// 2.大选框的状态,是由四个小选框的状态决定!由四个小选状态计算出来
// [大选框的状态被计算出来!]
export default {
  // 初始化数据
  data() {
    return {
      arr: [
        {
          name: "猪八戒",
          c: true, // 该项是否选中?
        },
        {
          name: "孙悟空",
          c: false,
        },
        {
          name: "唐僧",
          c: false,
        },
        {
          name: "白龙马",
          c: false,
        },
      ],
    };
  },
  //计算属性:
  computed:{
    // 【简单写法】语法:
    // 自定义属性名:(){计算出某个值的过程   return 结果; } 
    bigCk(){
      // 四个小选-->决定大选
      let key;//大选值
      let num=0;// 小选选中的个数

      // 统计小选选中的个数
      // this.arr当前的组件对象arr
      this.arr.forEach(item =>{
        if(item.c==true){
          num++;// 统计
        }
      });

      // num 统计的结果
      if(num==this.arr.length){
        // 选中的个数 和 数组的长度一样
        key = true;
      }else{// 有的没有选中
        key = false;
      }
      return key;
    }
  },
};
</script>

方法二 —— every方法

①、【计算属性的简单写法】
  • 🤔🤔🤔every()方法是数组对象的一个方法,它用于检测数组中的所有元素是否都满足某个条件,如果所有元素都满足条件,则返回true,否则返回false。
ck(){
  return this.arr.every(item => item.c==true)
}

在这里插入图片描述

②、【完整写法】
ck:{
  get(){
    return this.arr.every(item => item.c==true);
  }
}

📢📢📢(2)全选算计小选

  • 点击“选中的”全选按钮,所有的选项都取消。
<template>
  <div>
    <span>全选:</span>
    <input type="checkbox" v-model="ck" />
    <!-- <button >反选</button> -->
    <ul>
      <li v-for="(item, i) in arr" :key="i">
        <!-- v-model="item.c"  双向数据绑定👇👇👇👇👇 -->
        <input type="checkbox" v-model="item.c" />
        <span>{{ item.name }}</span>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  // 初始化数据
  data() {
    return {
      arr: [
        {
          name: "猪八戒",
          c: true, // 该项是否选中?
        },
        {
          name: "孙悟空",
          c: false,
        },
        {
          name: "唐僧",
          c: false,
        },
        {
          name: "白龙马",
          c: false,
        },
      ],
    };
  },
  //计算属性:
  computed:{
      ck:{
        get(){
          return this.arr.every(item => item.c==true);
        },
        set(val){//ck要算计别人,得让视图上有得到ck值机会
          //把val值设置给每一个小选框!
          this.arr.forEach(item =>item.c=val);
        }
      }
  },
};
</script>
  • 🔔🔔🔔注意:
    什么时候用计算属性:
    ①、简单写法:发现某个值,被算计出来!!
    ②、完整写法:除了被算计,还要算计别人!!

(二)计算属性的设置问题—完整写法

  1. ✅✅✅计算属性默认情况下只能获取,不能修改。
  2. ✅✅✅要给计算属性赋值,就必须写计算属性的完整写法!!
computed:{
	full:{
		get(){
			...
		},
		set(value){
			...
		}
	}
}
  • 💭💭💭什么时候用计算属性完整写法? 给计算属性变量赋值时。

(三)不用计算属性,用函数调用能实现吗?计算属性优势在哪里?

📢📢📢(1)计算属性的缓存说明

  • 🍂🍂🍂计算属性,基于依赖项的值进行缓存,依赖的变量不变,都直接从缓存取结果。
  • 计算属性如果被多次使用,性能极高。
<template>
  <div>
    <ul>
      <li v-for="(item,i) in list" :key="i"> {{ item }}</li>
    </ul>
    <h1>总分由方法调用:{{ zf() }}</h1>
    <h1>总分由方法调用:{{ zf() }}</h1>
    <h1>总分由方法调用:{{ zf() }}</h1>

    <h1>总分由计算属性:{{ jszf }}</h1>
    <h1>总分由计算属性:{{ jszf }}</h1>
    <h1>总分由计算属性:{{ jszf }}</h1>
  </div>
</template>

<script>
export default {
  data(){
    return{
      list:[88,99,100]
    }
  },
  methods:{
    // 没有使用计算属性,用常规方法调用,返回值
    zf(){
      console.log("方法调用")
      return this.list.reduce((sum,item) => sum+=item,0);
    }
  },
  computed:{
    jszf(){
      console.log("计算属性")
      return this.list.reduce((sum,item) => sum+=item,0);
    }
  }
}
</script>

在这里插入图片描述

  • 对比一下函数执行的次数?

📢📢📢(2)优势

  • 🍗🍗🍗计算属性特点?
    ①、计算后会立刻缓存,下次直接读缓存
    ②、依赖项改变, 函数会重新执行 并 重新缓存
  • 多次使用计算属性,性能会极高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp实现聊天消息触,vue3和vue2实现聊天消息触底 scrollTop ,scrollHeight Pc端H5端都适用

uniapp触底SDN链接如下(本人的另一篇博客) uniapp聊天时时触底链接 Pc端 模拟手机端H5 vue3写法 <template><div><!-- 聊天窗体 --><div class"test" id"gundong"><div class"text" v-for"p in chat"&…

Html基础知识学习——兼容问题与解决方法

文章目录 1.计算一定要精确&#xff0c;不要让内容的宽高超出我们设置的宽高&#xff0c;在IE6下内容会撑开设置好的宽高2.元素浮动&#xff0c;宽度需要内容撑开&#xff0c;就给里面的块元素都加浮动3.在ie6.ie7下元素要浮动并在同一行 就给这些元素都加浮动4.注意标签嵌套规…

C# WPF实现动画渐入暗黑明亮主题切换效果

C# WPF实现动画渐入暗黑明亮主题切换效果 效果图如下最近在Bilibili的桌面端看到一个黑白主题切换的效果感觉,挺有意思。于是我使用WPF尝试实现该效果。 主要的切换效果,基本实现不过还存在一些小瑕疵,比如字体等笔刷不能跟随动画进入进行切换。因为Bilibili的客户端是用el…

【算法 -- LeetCode】(018) 四数之和

1、题目 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; …

【Hadoop 01】简介

1 Hadoop 简介 Hadoop适合海量数据分布式存储和分布式计算 Hadoop 3.x的细节优化&#xff1a; Java改为支持8及以上HDFS支持纠删码HDFS支持多NameNodeMR任务级本地优化多重服务默认端口变更 Hadoop主要包含三大组件&#xff1a;HDFSMapReduceYARN HDFS负责海量数据的分布式存…

HttpRunner自动化之跨文件传递变量值输出变量值

跨文件传递&输出变量值 output: 输出变量值,此参数在httprunner2.2版本的时候被 export 代替&#xff0c;跨文件传递参数的功能在httprunner2.2之后不生效。&#xff08;但是实际测试过程中&#xff0c;还可以使用跨文件功能&#xff09; export: 输出变量值,且可以跨文件…

(黑客)网络安全靠自学?你不要命啦?

引言⚡ ✈️网络安全&#xff0c;顾名思义&#xff0c;无安全&#xff0c;不网络。现如今&#xff0c;安全行业飞速发展&#xff0c;我们呼吁专业化的 就职人员 与 大学生 &#xff0c;而你&#xff0c;认为自己有资格当黑客吗&#xff1f; ✒️本文面向所有信息安全领域的初学…

2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?

2023-07-14&#xff1a;讲一讲Kafka与RocketMQ中存储设计的异同&#xff1f; 答案2023-07-14&#xff1a; 在Kafka中&#xff0c;文件的布局采用了Topic/Partition的方式&#xff0c;每个分区对应一个物理文件夹&#xff0c;且在分区文件级别上实现了顺序写入。然而&#xff0…

springboot逍遥大药房管理系统

逍遥大药房管理系统的需求和管理上的不断提升&#xff0c;逍遥大药房管理的潜力将无限扩大&#xff0c;逍遥大药房管理系统在现代社会上被广泛关注&#xff0c;本系统对此进行总体分析&#xff0c;将逍遥大药房信息管理的发展提供参考。逍遥大药房管理系统对逍遥大药房管理方面…

xxl-job的简单使用

xxl-job是一个分布式任务调度框架&#xff0c;在Spring中&#xff0c;提供有任务调度的注解功能&#xff0c;在之前的项目中&#xff0c;非分布式任务都可以直接使用Spring框架提供的Scheduled注解和EnableScheduling注解来实现定时任务。 EnableScheduling注解加载项目启动类上…

Azure Kinect DK 在设备管理器找不到此设备

参考 Azure Kinect DK 在设备管理器找不到此设备_Thomas_yx的博客-CSDN博客 type-c------------------type-c 接电脑&#xff0c;数据传输 圆------------------usb 电脑线

RabbitMQ ---- 交换机

RabbitMQ ---- 交换机 1. Exchanges1.1 Exchanges 概念1.2 Exchanges 的类型1.3 无名 exchange 2. 临时队列3. 绑定&#xff08;bindings&#xff09;4. Fanout4.1 Fanout 介绍4.2 Fanout 实战 5. Direct exchange5.1 回顾5.2 Direct exchange 介绍5.3 多重绑定5.4 实战 6. Top…

svn清理时提示:没有校验和记录,因此不能从原始内容仓库中安装

1.进入官网 https://www.sqlite.org/download.html 2.找到sqlite-dll-win32-x86-3410200.zip下载 3.解压后复制sqlite3.exe到无法清理svn的那个路径地下的.svn文件夹 如果找不到.svn文件夹&#xff0c;勾选下方 4.在当前文件夹下运行cmd执行以下语句 sqlite3 wc.db &quo…

基于Python情感分析制定交易策略

大家好&#xff0c;在快速发展的金融市场环境中&#xff0c;交易者不断寻找创新的方法来获得竞争优势。情感分析已经成为一种有价值的工具&#xff0c;通过分析文本数据&#xff0c;如新闻文章和社交媒体帖子等&#xff0c;来衡量市场情绪。 通过将情感分析纳入到交易策略中&a…

使用wxPython和pillow开发拼图小游戏(四)

上一篇介绍了使用本地图片来初始化游戏的方法&#xff0c;通过前边三篇&#xff0c;该小游戏的主要内容差不多介绍完了&#xff0c;最后这一篇来介绍下游戏用时的计算、重置游戏和关闭窗口事件处理 游戏用时的计算 对于游戏用时的记录&#xff0c;看过前几篇的小伙伴可能也发现…

MS6363三通道 6 阶高清视频滤波驱动

芯片概述 MS6363 是一个 3 通道视频缓冲器&#xff0c;它内部集成 6dB 增益的轨到轨输出驱动器和 6 阶输出重建 滤波器。MS6363 的-3dB 带宽为 35MHz&#xff0c;压摆率为 160V/us。MS6363 比无源 LC 滤波器与外加驱动的 解决方案能提供更好的图像质量。它单电源供电范围为2…

2023年11月软考中级软件评测师报名考试时间-入口-条件-流程

软考中级软件评测师报名时间&#xff1a; 海南2023下半年软考中级软件评测师报名时间&#xff1a;8月14日至8月21日 四川2023下半年软考中级软件评测师报名时间&#xff1a;8月14日至8月30日 黑龙江2023下半年软考中级软件评测师报名时间&#xff1a;8月16日至8月22日 广西…

【PDF】html/dom生成pdf

1、简要描述 上一篇博客主要讲的是pdf文件转换成canvas&#xff0c;然后进行相关的操作。本篇博客主要讲html中dom如何生成pdf文件&#xff08;前端生成pdf&#xff09;&#xff0c;后端生成pdf当然也可以&#xff0c;原理也是将html网页通过后端服务导出成pdf&#xff0c;不深…

LaTex使用bib文件引用参考文献(最简单有效!!!)

引言 在写文章&#xff0c;尤其是科技类文章的时候&#xff0c;需要引用大量参考文献。如果按照本身给的模板一个个填入是十分浪费时间的&#xff0c;并且后面引用格式或者顺序有改变的话改动很大。所以我一般习惯于用Bib文件直接导入&#xff0c;接下来就是介绍使用Bib文件导…