通过计算属性来更改几个数据,针对于这几个数据有失焦事件,但是先触发了失焦事件,后获得到了计算属性怎么办,我想先获取到计算属性的值再进行失焦事件

计算属性是惰性的,只有依赖的数据发生变化时才会重新计算。这可能会导致失焦事件先触发,获取到的计算属性值还未更新的情况。要解决这个问题,有两种方法:1. 在失焦事件中加入 setTimeout,等计算属性重新计算后再获取其值。

js
computed: {
  fullName() { /* ... */ }  
},
methods: {
  onBlur() {
    setTimeout(() => {
      let fullName = this.fullName;  // 此时已重新计算,拿到最新值
      // 使用 fullName ...
    }, 0);
  }
}

setTimeout 的延时时间设置为 0,是为了放到队列末尾,等编译器完成计算属性的重新计算后再执行。2. 监听计算属性,在它变化时手动触发失焦事件。

js
computed: {
  fullName() { /* ... */ }  
},
watch: {
  fullName() {
    this.onBlur();  // 监听到变化时手动触发失焦事件
  }  
},
methods: {
  onBlur() {
    let fullName = this.fullName;  // 此时已重新计算,拿到最新值
    // 使用 fullName ...
  }
} 

监听计算属性 fullName,当它变化时立即手动调用 onBlur 方法,这样就可以保证在失焦事件中获取到计算属性的最新值。这两种方法的原理都是:确保在失焦事件执行时,计算属性已完成更新,以获取其最新计算的值。setTimeout 延时执行失焦事件,等计算属性完成更新;
watch 监听计算属性变化,手动触发失焦事件。所以选择方法主要根据个人喜好,两者实现原理是类似的。

猜你喜欢

转载自blog.csdn.net/weixin_51263829/article/details/130811719