element-plus里tabs点击如何更新内容?

tabs的pane是动态组件
父组件里这么调用子组件
====== 父组件 =======

<el-tabs v-model="curTab" type="border-card">
<el-tab-pane v-for="(item, index) in tabNames" :key="index" :label="item.label" :name="item.name" lazy>
  <component :is="item.name" :detail="detail" :id="id" />
</el-tab-pane>
</el-tabs>
tabNames() {
      return [
        { label: "详细资料", name: "BaseInfo" },
        { label: "操作记录", name: "RelativeHandle" }
      ];
    },

====== 子组件 =======
在vue2和element ui里,子组件里监听rootTabs的名称变换,更新当前页面的内容,如下使用

inject: ["rootTabs"],

watch: {
    "rootTabs.currentName"(val) {
      if (val === "BaseInfo") {
          this.initData();
       }
    }
  },

vue3+element-plus里如何使用?

阅读 2.5k
1 个回答

element-plus里没有rootTabs这个inject了,所以自己在父组件inject一个即可
参考
https://cn.vuejs.org/guide/components/provide-inject.html#inject

1、设置
app.config.unwrapInjectedRef = true
vue3.3不需要

2、父类里provide

provide() {
    return {
      myTab: computed(() => this.curTab)
    }
  },

3、子类里

watch: {
    "myTab"(val) {
      if (val === "BaseInfo") {
          this.initData();
       }
    }
  },

可以解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题