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

计算属性与监听属性

【 1 】计算属性

image-20240427212743197

  • 计算属性大致就是这样

# 1  计算属性是基于它们的依赖进行缓存的# 2 计算属性只有在它的相关依赖发生改变时才会重新求值# 3 计算属性就像Python中的property,可以把方法/函数伪装成属性
# 计算属性本质上是一个函数,它们可以通过 get 和 set 方法对属性进行操作。# 4 写在computed中,必须返回值--》返回值才是属性-以后把他当属性用-for循环

个人的理解就是

  • vue中的计算属性的好处就是我比如在设置了一个input标签里写了计算属性之后 别的组件发生改变我的input标签也不会发生改变
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="https://unpkg.com/vue@2.6.14/dist/vue.js"></script></head>
<body>
<div id="app"><input type="text" v-model="name">--》》{{ newName }}<hr><input type="text" v-model="name1">---》{{ name1 }}</div>
</body>
<script>var vm = new Vue({el: '#app',data: {name: '',name1: ''},methods: {// 普通函数形式handleToUpper() {console.log('函数我执行了')return this.name.substring(0, 1).toUpperCase() + this.name.substring(1)}},computed:{// 将 handleToUpper() 方法改写为计算属性newName(){console.log('计算属性我执行了')return this.name.substring(0, 1).toUpperCase() + this.name.substring(1)}}})</script>
</html>

image-20240427230605301

【 2 】监听属性

# 1 监听住一个属性,只要这个属性发生变化,就执行函数

name 属性被监听,当它的值发生变化时,会触发相应的处理函数。

在Vue.js中,监听属性(Watchers)必须在 watch 对象中定义,而计算属性(Computed Properties)必须在 computed 对象中定义。

  • Watchers(监听属性):用于监听某个数据的变化,并在数据发生变化时执行一些自定义的逻辑。你可以在 watch 对象中定义一个或多个属性,每个属性对应一个要监听的数据,并指定一个处理函数。
  • Computed Properties(计算属性):用于基于已有的数据计算出一个新的值,这个新的值会被缓存起来,只有在相关的依赖发生变化时才会重新计算。你可以在 computed 对象中定义计算属性,每个属性对应一个计算值的处理函数。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="https://unpkg.com/vue@2.6.14/dist/vue.js"></script></head><div id="app"><input type="text" v-model="name"><p>新的 name: {{ name }}</p><p>旧的 name: {{ oldName }}</p>
</div><script>var vm = new Vue({el: '#app',data: {name: 'John',oldName: ''},watch: {// 监听name属性的变化name: function(newValue, oldValue) {this.oldName = oldValue; // 将旧的名字存储到oldName数据属性中console.log('Name changed from ' + oldValue + ' to ' + newValue);}}});
</script>
</html>

image-20240427231119588

【 3 】生命周期钩子

生命周期

  • new Vue---->根组件.03

image-20240428190832503

vue2 组件的生命周期钩子函数

  • 一个vue的组件,从创建开始—》到最后销毁—》经历一些过程—》每个过程都绑定了一个函数–》当到这个过程的时候,这个函数就会执行
    面向切面编程:AOP

8个生命周期钩子函数

  • beforeCreate: 组件创建之前实现这个:组件html,js–》html和js都是空的
  • created:组件创建完成后:js就有值了,html还是空的 (向后端发送ajax请求)
  • beforeMount:挂载模板之前,js有值,模板(html) 还是空的(向后端发送ajax请求)
  • mounted:挂载完成:js有值,模板有值
  • beforeUpdate:刷新之前执行:只要页面发送变化或js变量发生变化,就会触发它的执行
  • updated:刷新之后执行
  • beforeDestroy:被销毁之前执行 (资源清理性工作)
  • destroyed:被销毁之后执行

实际用途

  • 页面加载完成,向后端发请求拿数据
    • 写在create中
  • 组件中有定时任务,组件销毁,要销毁定时任务、
# 1 new Vue---->根组件
# 2 创建全局组件---》放在根组件中
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./vue/vue.js"></script>
</head>
<body>
<div id="app"><h1>组件使用</h1><button @click="hanleShow">显示隐藏组件</button><hr><Child v-if="isShow"></Child><hr></div>
</body>
<script>let a = {template: `<div><button @click="handleClick">{{ title }}</button></div>`,data() {return {title: '首页',t:null}},methods: {handleClick() {this.title = '拜年了'alert(this.title)}},beforeCreate() {console.log('beforeCreate')console.log(this.title)console.log(this.$el)},created() {// 跟后端交互console.log('created')console.log(this.title)console.log(this.$el)// 启动定时器--》每隔3s,打印helloworldthis.t=setInterval(()=>{console.log('hello world')},3000)},beforeMount() {console.log('beforeMount')console.log(this.title)console.log(this.$el)},mounted() {console.log('mounted')console.log(this.title)console.log(this.$el)},beforeUpdate() {console.log('beforeUpdate')},updated() {console.log('updated')},beforeDestroy(){console.log('beforeDestroy')// 销毁定时器clearInterval(this.t)this.t=null},destroyed() {console.log('destroyed')},}// 1 定义全局组件Vue.component('Child', a)var vm = new Vue({el: '#app',data: {isShow: true},methods: {hanleShow() {this.isShow = !this.isShow}}})</script>
</html>

相关文章:

  • 恒创科技:无法与服务器建立安全连接怎么解决?
  • 国内常用的编程博客网址:技术资源与学习平台
  • Stable Diffusion|插件安装基础教程
  • 前端角色负责人岗
  • 5、css3 自动动画渐变背景
  • 网络安全岗秋招面试题及面试经验分享
  • 【数据分享】中国劳动统计年鉴(1991-2023)
  • 面试常见问题-用Java实现合并两个有序数组
  • #window11设置系统变量#
  • 【EFK日志系统】docker一键部署filebeat、metricbeat
  • Transformer基础2:位置编码、attention、normalization、residule block
  • go语言同一包中的同一变量实现不同平台设置不同的默认值 //go:build 编译语法使用示例
  • taskENTER_CRITICAL()分析
  • 数据可视化:解析其在现代生活中的日益重要地位
  • 6个PPT素材模板网站,免费!
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【React系列】如何构建React应用程序
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • ComponentOne 2017 V2版本正式发布
  • CSS 提示工具(Tooltip)
  • Flex布局到底解决了什么问题
  • js数组之filter
  • Redis字符串类型内部编码剖析
  • XForms - 更强大的Form
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 跨域
  • 面试遇到的一些题
  • 爬虫模拟登陆 SegmentFault
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 智能合约开发环境搭建及Hello World合约
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​Linux·i2c驱动架构​
  • ​业务双活的数据切换思路设计(下)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C++17) optional的使用
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转载)OpenStack Hacker养成指南
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net FrameWork简介,数组,枚举
  • .NET MVC之AOP
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [BUG] Authentication Error
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [emacs] CUA的矩形块操作很给力啊
  • [HTML]HTML5实现可编辑表格
  • [IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式
  • [Java][Liferay] File system in liferay
  • [Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例