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或组什实例对象。

posted @   RikiEromit  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示