瀏覽代碼

Tabs: rerender when label changes (#14496)

* tab: fix active bar bug (#14416)

fix: Tab active bar doesn't resize when tab label changes dynamically

* tab: fix active bar bug

changes done as suggested in review
Akshay Jat 6 年之前
父節點
當前提交
9736448b54
共有 2 個文件被更改,包括 6 次插入3 次删除
  1. 1 1
      packages/tabs/src/tab-pane.vue
  2. 5 2
      packages/tabs/src/tabs.vue

+ 1 - 1
packages/tabs/src/tab-pane.vue

@@ -51,7 +51,7 @@
 
     watch: {
       label() {
-        this.$parent.$forceUpdate();
+        this.$parent.$emit('tabLabelChanged');
       }
     }
   };

+ 5 - 2
packages/tabs/src/tabs.vue

@@ -55,13 +55,14 @@
     },
 
     methods: {
-      calcPaneInstances() {
+      calcPaneInstances(isLabelUpdated = false) {
         if (this.$slots.default) {
           const paneSlots = this.$slots.default.filter(vnode => vnode.tag &&
             vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'ElTabPane');
           // update indeed
           const panes = paneSlots.map(({ componentInstance }) => componentInstance);
-          if (!(panes.length === this.panes.length && panes.every((pane, index) => pane === this.panes[index]))) {
+          const panesChanged = !(panes.length === this.panes.length && panes.every((pane, index) => pane === this.panes[index]));
+          if (isLabelUpdated || panesChanged) {
             this.panes = panes;
           }
         } else if (this.panes.length !== 0) {
@@ -172,6 +173,8 @@
       if (!this.currentName) {
         this.setCurrentName('0');
       }
+
+      this.$on('tabLabelChanged', this.calcPaneInstances.bind(null, true));
     },
 
     mounted() {