vue 监听器及计算属性高阶用法


在这里插入图片描述

监听器的高级用法

深度监听

默认情况下,Vue.js 的监听器只会监听对象或数组的第一层属性变化,而不会深度监听其嵌套的属性变化。但是,在某些情况下,我们需要深度监听对象或数组中的所有属性变化。这时,我们可以使用deep选项来设置深度监听。

例如,假设我们有以下数据:

data: {
    
    
  user: {
    
    
    name: 'John',
    age: 30,
    address: {
    
    
      city: 'New York',
      state: 'NY'
    }
  }
}

如果我们需要深度监听user对象中的所有属性,包括其嵌套的属性,可以使用以下代码:

watch: {
    
    
  'user': {
    
    
    handler: function (val, oldVal) {
    
     /* ... */ },
    deep: true
  }
}

这样,当user对象中任何一个属性发生变化时,都会触发监听器。

立即触发

默认情况下,Vue.js 的监听器是在被监听的属性发生变化后才会触发。但是,在某些情况下,我们需要在监听器创建时立即触发一次监听器函数(handler)。这时,我们可以使用immediate选项来设置立即触发监听器。

例如,假设我们有以下数据:

data: {
    
    
  counter: 0
}

如果我们需要在监听器创建时就立即触发一次监听器函数,可以使用以下代码:

watch: {
    
    
  'counter': {
    
    
    handler: function (val, oldVal) {
    
     /* ... */ },
    immediate: true
  }
}

这样,当监听器创建完成后,就会立即触发一次监听器函数。

计算属性的高级用法

Getter 和 Setter

默认情况下,计算属性只有 getter 函数,它用于计算出一个新的值。但是,在某些情况下,我们也需要一个 setter 函数,用于更新计算属性所依赖的原始数据。这时,我们可以使用get和set选项来设置 getter 和 setter 函数。

例如,假设我们有以下数据:

data: {
    
    
  firstName: 'John',
  lastName: 'Doe'
}

如果我们需要定义一个计算属性fullName,它的值为firstName和lastName的组合,并且我们希望可以通过fullName来更新firstName和lastName,可以使用以下代码:

computed: {
    
    
  fullName: {
    
    
    get: function () {
    
    
      return this.firstName + ' ' + this.lastName
    },
    set: function (newValue) {
    
    
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}

这样,我们就可以通过fullName计算出一个新的值,并且也可以通过设置fullName来更新原始数据。

缓存策略

默认情况下,Vue.js 的计算属性是具有缓存策略的。这意味着,只有当计算属性依赖的原始数据发生变化时,才会重新计算该属性的值。但是,在某些情况下,我们需要禁用缓存策略,保证每次访问计算属性时都重新计算该属性的值。这时,我们可以使用cache选项来设置缓存策略。

例如,假设我们有以下数据:

data: {
    
    
  counter: 0
}

如果我们需要定义一个计算属性timestamp,它的值为当前时间戳,并且我们希望每次访问timestamp都重新计算该属性的值,可以使用以下代码:

computed: {
    
    
  timestamp: {
    
    
    get: function () {
    
    
      return Date.now()
    },
    cache: false
  }
}

这样,每次访问timestamp时,都会重新计算该属性的值。

计算属性的依赖

默认情况下,计算属性会自动追踪其所依赖的原始数据,并在其所依赖的原始数据发生变化时重新计算属性的值。但是,在某些情况下,我们需要手动指定计算属性所依赖的原始数据。这时,我们可以使用watch选项来监听原始数据的变化,并在变化时手动更新计算属性的值。

例如,假设我们有以下数据:

data: {
    
    
  firstName: 'John',
  lastName: 'Doe'
}

如果我们需要定义一个计算属性fullName,它的值为firstName和lastName的组合,并且我们希望在firstName或lastName发生变化时手动更新fullName的值,可以使用以下代码:

computed: {
    
    
  fullName: function () {
    
    
    return this.firstName + ' ' + this.lastName
  }
},
watch: {
    
    
  firstName: function () {
    
    
    this.fullName = this.firstName + ' ' + this.lastName
  },
  lastName: function () {
    
    
    this.fullName = this.firstName + ' ' + this.lastName
  }
}

这样,每当firstName或lastName发生变化时,就会手动更新fullName的值。

总结

监听器和计算属性是Vue.js中非常重要的特性,它们可以让我们更加方便地监控和处理数据的变化。在本文中,我们探讨了监听器和计算属性的高级用法,包括深度监听、立即触发、Getter 和 Setter、缓存策略以及计算属性的依赖等。通过深入理解这些高级用法,我们可以更好地利用Vue.js提供的数据驱动功能,编写出更加灵活和高效的前端代码。

猜你喜欢

转载自blog.csdn.net/weixin_44599143/article/details/129839174