Commit 1a1f7c325c0eee00236b50cd7d48ecf06467e911
Merge branch '2.0' of https://github.com/iview/iview into 2.0
Showing
1 changed file
with
24 additions
and
1 deletions
Show diff stats
src/components/tabs/tabs.vue
... | ... | @@ -26,7 +26,7 @@ |
26 | 26 | <script> |
27 | 27 | import Icon from '../icon/icon.vue'; |
28 | 28 | import Render from '../base/render'; |
29 | - import { oneOf } from '../../utils/assist'; | |
29 | + import { oneOf, MutationObserver } from '../../utils/assist'; | |
30 | 30 | import Emitter from '../../mixins/emitter'; |
31 | 31 | import elementResizeDetectorMaker from 'element-resize-detector'; |
32 | 32 | |
... | ... | @@ -310,6 +310,16 @@ |
310 | 310 | }, |
311 | 311 | handleResize(){ |
312 | 312 | this.updateNavScroll(); |
313 | + }, | |
314 | + isInsideHiddenElement () { | |
315 | + let parentNode = this.$el.parentNode; | |
316 | + while(parentNode) { | |
317 | + if (parentNode.style.display === 'none') { | |
318 | + return parentNode; | |
319 | + } | |
320 | + parentNode = parentNode.parentNode; | |
321 | + } | |
322 | + return false; | |
313 | 323 | } |
314 | 324 | }, |
315 | 325 | watch: { |
... | ... | @@ -329,9 +339,22 @@ |
329 | 339 | this.showSlot = this.$slots.extra !== undefined; |
330 | 340 | this.observer = elementResizeDetectorMaker(); |
331 | 341 | this.observer.listenTo(this.$refs.navWrap, this.handleResize); |
342 | + | |
343 | + const hiddenParentNode = this.isInsideHiddenElement(); | |
344 | + if (hiddenParentNode) { | |
345 | + this.mutationObserver = new MutationObserver(() => { | |
346 | + if (hiddenParentNode.style.display !== 'none') { | |
347 | + this.updateBar(); | |
348 | + this.mutationObserver.disconnect(); | |
349 | + } | |
350 | + }); | |
351 | + | |
352 | + this.mutationObserver.observe(hiddenParentNode, { attributes: true, childList: true, characterData: true, attributeFilter: ['style'] }); | |
353 | + } | |
332 | 354 | }, |
333 | 355 | beforeDestroy() { |
334 | 356 | this.observer.removeListener(this.$refs.navWrap, this.handleResize); |
357 | + this.mutationObserver.disconnect(); | |
335 | 358 | } |
336 | 359 | }; |
337 | 360 | </script> | ... | ... |