Vue:组件的双向绑定,watch监听 props 时失效

1. 组件的双向绑定

  • 组件外部用 v-model 绑定
  • 组件内部用 value 接收
  • 组件内部监听 value 和副本 currentValue,在 currentValue 发生变化的时候广播 input 事件,即可达到双向绑定的效果
watch: {
  value() {
    this.currentValue = this.value
  },
  currentValue(val) {
    this.$emit("input",val);
  },
},

2. 在组件中监听 prop 失效
解决办法:写成下面这种形式,使用 immediate 属性。

watch: {
  loading: {
    immediate: true,
    handler(val){
      if(val){
        this.currentDisabled = true
      }
    },
  },
},

原因:因为 watch 的一个特点是,最初绑定的时候是不会执行的,当 loading 值改变时才进行监听计算。而immediate: true 代表如果在 wacth 里声明了 loading 之后,就会立即先去执行里面的 handler 方法,如果为 false就跟我们以前的效果一样,不会在绑定的时候就执行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容