VUE学习个人纪录05
计算属性与监视
计算属性:
1.定义: 要用的属性不存在,要通过已有属性计算得来。
2.原理: 底层借助了objcet.defineproperty方法提供的getter和setter。
3.get函数什么时候执行?
(1).初次读取时会执行一次。
(2).当依赖的数据发生改变时会被再次调用。
4.优势: 与methods实现相比,内部有缓存机制(复用),效率更高,调试方便。
5.备注:
1.计算属性最终会出现在vm上,直接读取使用即可。
2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变。
1 完整写法 2 fullName: { 3 4 get() { 5 console.log('get被调用了') //此处的this是vm中的 6 return this.firstname + '-' + this.lastname 7 }, 8 set(value) { 9 console.log('set', value) 10 const arr = value.split('-') 11 this.firstname = arr[0] 12 this.lastname = arr[1] 13 } 14 15 }
此外:
1 简写:只考虑书写,不考虑修改才能使用该形式 2 fullName() { 3 4 5 console.log('get被调用了') //此处的this是vm中的 6 return this.firstname + '-' + this.lastname 7 }
监视属性
监视属性watch:
1.当被监视的属性变化时,回调函数自动调用,进行相关操作
2.监视的属性必须存在,才能进行监视!!
3.监视的两种写法:
(1).new Vue时传入watch配置
1 watch: { 2 isHot: { 3 immediate: true, //初始化时让handler调用 4 handler(newValue, oldValue) { 5 console.log('isHot被修改了' + newValue, oldValue) 6 } //当函数属性被修改时会被调用 7 } 8 }
(2).通过vm. $watch监视
1 vm.$watch('ishot', { 2 immediate: true, //初始化时让handler调用 3 handler(newValue, oldValue) { 4 console.log('isHot被修改了' + newValue, oldValue) 5 } //当函数属性被修改时会被调用 6 7 })
深度监视
(1). vue中的watch默认不监测对象内部值的改变(一层)。
1 watch{ 2 'numbers.a': { 3 handler() { 4 console.log('a被改变了') 5 } 6 } 7 }
(2).配置deep:true可以监测对象内部值改变(多层)。
1 //监视多级结构中某个属性的变化 2 numbers: { 3 deep: true, 4 handler() { 5 console.log('numbers被改变了') 6 } 7 }
备注:
(1). Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以。
(2).使用watch时根据数据的具体结构,决定是否采用深度监视。
监视属性的简写形式
正常写法
1 vm.$watch('isHot', { 2 handler(newValue, oldValue) { 3 console.log('isHot被修改了', newValue, oldValue) 4 } 5 })
简写形式
vm.$watch('isHot', function(newValue, oldValue) { console.log('isHot被修改了', newValue, oldValue, this) })
computed和lwatch之间的区别
1.computed能完成的功能,watch都可以完成。
2.watch能完成的功能,computed不一定能完成。
例如: watch可以进行异步操作。两个重要的小原则:
1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm或组件实例对象
2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数,这样this的指向才是vm或组什实例对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现