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

【前端】vue监视属性和计算属性对比

首先分开讲解各个属性的作用。
1.计算属性
作用:用来计算出来一个值,这个值调用的时候不需要加括号,会根据依赖进行缓存,依赖不变,computed的值不会重新计算。

    const vm = new Vue({el:'#root',data:{lastName:'张',firstName:'三',},computed:{fullName:{//get作用,读取fullName时get调用且返回值是fullName的值get(){return this.lastName.slice(0,3)+'-'+this.firstName.slice(0,3);},//当fullName被修改时,会调用setset(value){const arr = value.split('-');this.lastName = arr[0];this.firstName = arr[1];}}}})

其中computed的属性就是计算属性,其中get读取方法尽在初次读取的时候调用以及所依赖的数据发生变化的时候调用。set设置方法是当数据发生变化时就会直接调用去重新计算属性值。

在这里插入图片描述
2.监听属性
作用:和js中的事件监听类似,当vue中的属性值发生变化时执行。

const vm = new Vue({el:'#root',data:{ishot:true,numbers:{a:1,b:1}},methods:{change(){//this.ishot = (this.ishot==true)?false:truethis.ishot = !this.ishot},},computed:{info(){return this.ishot?'炎热':'凉爽'}},watch:{ishot:{immediate:true,   //初始化时让handler调用一下//handler什么时候调用?当isHot发生改变时。handler(newValue,oldValue){console.log("ishot被改变了:",newValue,'->',oldValue)}},//监视多级结构中某个属性的变化'numbers.a':{immediate:true,   //初始化时让handler调用一下//handler什么时候调用?当isHot发生改变时。handler(newValue,oldValue){console.log("a被改变了:",newValue,'->',oldValue)}},//监视多级结构中所有属性的变化numbers:{deep:true,  //开启深度监视handler(){console.log('numbers改变了');}}}})

上述代码中watch属性就是计算属性,它包含两个属性值,其中immediate属性记录的是,在初始化 的时候是否需要计算一次监视属性;还有一个deep属性值代表的是当所要监视的属性值是对象是,是否要进行深度监视,即当对象内部属性值发生变化时是否调用监视函数。

在这里插入图片描述
案例:列表过滤
问题描述搜索框,对列表中的数据进行模糊筛选。

在这里插入图片描述
在这个问题里面,列表会根据input框中的内容对列表中的名字内容进行筛选。
因为要显示的内容跟data中的列表不一样,所以一定是需要重新建一个参数的,因此就需要初始化。例如监听属性中immediate属性。
在这里插入图片描述

html:<div id="root"><h2>人员列表</h2><input type="text" placeholder="请输入名字" v-model="keyWord"><ul><!-- 动态绑定id标识 --><li v-for="(person,index) in filteredPersons" :key="person.id">{{person.name}}-{{person.age}}-{{person.sex}}</li></ul></div>
监视属性写法:js:new Vue({el:'#root',data:{keyWord:'',persons:[{id:'001',name:'马冬梅',age:19,sex:'女'},{id:'002',name:'周冬雨',age:20,sex:'女'},{id:'003',name:'周杰伦',age:21,sex:'男'},{id:'004',name:'温兆伦',age:22,sex:'男'}],filteredPersons:[]},watch:{//这里接收输出的值可以有两个,分别是新值和旧值;也可以只有一个新值keyWord:{immediate:true,handler(newValue){this.filteredPersons = this.persons.filter((p)=>{return p.name.indexOf(newValue)>=0;})}}}})
计算属性写法:js:new Vue({el:'#root',data:{keyWord:'',persons:[{id:'001',name:'马冬梅',age:19,sex:'女'},{id:'002',name:'周冬雨',age:20,sex:'女'},{id:'003',name:'周杰伦',age:21,sex:'男'},{id:'004',name:'温兆伦',age:22,sex:'男'}]},   computed:{filteredPersons:{get(){var filteredPersons = [];for(var i in this.persons){if(this.persons[i].name.indexOf(this.keyWord)>=0){filteredPersons.push(this.persons[i]);}}            return filteredPersons;         },set(value){this.keyWord = value;}}}})

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mp4怎么转换成mp3?看了就会的8种mp4转mp3方法!
  • 快速查找数组中出现奇数次的数字
  • Web应用加密数据传输方案
  • mac安装xmind
  • 前后端不分离,form前端表单提交,springboot后端list接收
  • <数据集>车内视角行人识别数据集<目标检测>
  • Ubuntu系统入门
  • fpga图像处理实战-水平镜像
  • Linux--网络层 IP协议
  • 数据结构-双向链表 代码实现
  • 二刷代码随想录训练营Day 38|322. 零钱兑换、279.完全平方数、139.单词拆分
  • 证书学习(一)keytool 工具使用介绍
  • Lesson 81+82 Roast beef and potatoes
  • RAG优化技巧 | 7大挑战与解決方式 | 提高你的LLM: 下篇
  • k8s 进阶实战笔记 | Ingress-traefik(一)
  • 【Linux系统编程】快速查找errno错误码信息
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • go语言学习初探(一)
  • javascript 总结(常用工具类的封装)
  • Map集合、散列表、红黑树介绍
  • Nacos系列:Nacos的Java SDK使用
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • scrapy学习之路4(itemloder的使用)
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Terraform入门 - 1. 安装Terraform
  • uva 10370 Above Average
  • vue.js框架原理浅析
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 每天10道Java面试题,跟我走,offer有!
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 小程序01:wepy框架整合iview webapp UI
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 正则与JS中的正则
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • $refs 、$nextTic、动态组件、name的使用
  • (10)ATF MMU转换表
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (7) cmake 编译C++程序(二)
  • (C++20) consteval立即函数
  • (done) 两个矩阵 “相似” 是什么意思?
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (第一天)包装对象、作用域、创建对象
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (蓝桥杯每日一题)love
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十)Flink Table API 和 SQL 基本概念
  • (十六)串口UART
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)