vue inject 只能响应一次,怎么解决呢?

设计vue的父子组件的时候,使用了provide/inject来传值,但是在使用el-input-number组件控制参数的时候,子组件调用父组件的函数只相应了一次,怎么解决?

父组件:

  provide() {
    return {
      host: () => this
    }
  },
  methods: {
    onUpdateProps(node) {
      console.log(node,"node")
      this.canvas.setValue(node)
    },
  }

子组件 :

<el-input-number v-model="props.node.fontSize" :size="inputSize" :min="12" :max="100" :step="1" default-value="12" style="width:100%;" @change="host().onUpdateProps(props.node)" />

inject: ['host'],

第一次点击加或者减可以生效,之后点击就无法生效了

为什么不使用事件传值呢,采用事件方式传值,简单,还好理解,下面是一个详细并简单的例子,有帮助请点击右上角采纳,有疑问可以下发评论哦
https://www.csdn.net/tags/MtTaAg0sNjc3NTQtYmxvZwO0O0OO0O0O.html#1props__emit_22

提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

如果只是父子组件传递事件的话,还是用$emit比较好吧。如果是想在子组件里更新父组件里变量的值,也可以用.sync修饰符。然后通过emit update来更新值。
简单的例子:
·父组件如下(父组件中可以监听title变量的值,然后去执行 this.canvas.setValue(node))

<text-document :node.sync="title"></text-document>

·子组件,change绑定事件

changeMethod(val){
this.$emit('update:node',val)
}

vue 文档有提到一点: provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。
如果你要实时响应this, 那么父组件的data中新建一个对象属性, 并把这个对象属性注入provide中.
举个例子如下:

data(){ 
  return{
      ...,
      fatherInstance: { instance: this }
  }
},
provide(){
  return{
    host :this.fatherInstance    // 此处provide一个对象
  }
},

原因是data是响应式数据, 因为host是对象, 对象是引用类型, 所以得以监听

统一回复一下,我找到问题了,不是inject的问题,是input-number的model问题,我传入model的层级太多导致input-number加减失效了