vue2隔代组件通讯?

代码如下


provide(this: any) {
        return {
            tableData: () => this.changeTableData,
        }
    },
   

image.png

image.png

this.changeTableData是要刷新表格的数据,provide发送changeTableData方法,在App.vue点击触发this.changeTableData,但是没有生效

image.png
用了inject: ['changeTableData'],reset是点击触发这个this.changeTableData,不但没有生效,还在页面上报
image.png

大佬们,怎么在app.vue,点击触发这个this.changeTableData呢,
求大佬指导

image.png

点击关闭的代码是这样的

// 维护弹窗状态
        reset(this: any, isShow) {
            if (isShow === false) {
                this.tableData()
            }
            if (isShow) return;
            Object.assign(this.$data, this.$options.data())
        },

image.png

阅读 2.8k
5 个回答
  1. 暂时看不出来问题在哪里
  2. 使用 MVVM 框架时,应该减少手动操作组件,尽量只操作数据,所以我认为你这个问题从根源上,就不应该这么做

我没记错的话 provide 是父组件,inject 是后代组件,为什么题主反过来使用了,原型链是向上查找的,不能反过来使用吧

父组件调用后代组件可以考虑用 $refs

// 子组件定义
methods: {
    hello() {
      console.log("Hello, World!");
    }
}

// 父组件调用
template: '<ChildComponent ref='child' />',
methods: {
    test() {
          this.$refs.child.hello()
    }
}

image.png

provide和inject是在父组件中使用provide,在后代组件中使用inject,以达到将父组件中的数据传递给后代组件的目的,你理解错误,用反了。

你这里可以在后代组件中触发函数,使用provide和inject传递一个变量,在后代组件中进行watch监听,有改变就调用changeTableData函数

最好的做法还是使用EventBus,这个可以网上搜索下,有很多,https://zhuanlan.zhihu.com/p/72777951/

试下这个?

provide: function() {
    return {
      tableData: () => this.changeTableData
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题