File tree Expand file tree Collapse file tree 3 files changed +29
-32
lines changed
Expand file tree Collapse file tree 3 files changed +29
-32
lines changed Original file line number Diff line number Diff line change 4949 }
5050 },
5151
52- mounted () {
53- this .$parent .addPanes (this );
54- },
55-
56- destroyed () {
57- if (this .$el && this .$el .parentNode ) {
58- this .$el .parentNode .removeChild (this .$el );
59- }
60- this .$parent .removePanes (this );
61- },
62-
6352 watch: {
6453 label () {
6554 this .$parent .$forceUpdate ();
Original file line number Diff line number Diff line change 5353 },
5454
5555 methods: {
56+ calcPaneInstances () {
57+ if (this .$slots .default ) {
58+ const paneSlots = this .$slots .default .filter (vnode => vnode .tag &&
59+ vnode .componentOptions && vnode .componentOptions .Ctor .options .name === ' ElTabPane' );
60+ // update indeed
61+ const panes = paneSlots .map (({ componentInstance }) => componentInstance);
62+ if (! (panes .length === this .panes .length && panes .every ((pane , index ) => pane === this .panes [index]))) {
63+ this .panes = panes;
64+ }
65+ }
66+ },
5667 handleTabClick (tab , tabName , event ) {
5768 if (tab .disabled ) return ;
5869 this .setCurrentName (tabName);
8798 } else {
8899 changeCurrentName ();
89100 }
90- },
91- addPanes (item ) {
92- const index = this .$slots .default .filter (item => {
93- return item .elm .nodeType === 1 && / \b el-tab-pane\b / .test (item .elm .className ) || item .elm .nodeType === 8 ;
94- }).indexOf (item .$vnode );
95- this .panes .splice (index, 0 , item);
96- },
97- removePanes (item ) {
98- const panes = this .panes ;
99- const index = panes .indexOf (item);
100- if (index > - 1 ) {
101- panes .splice (index, 1 );
102- }
103101 }
104102 },
103+
105104 render (h ) {
106105 let {
107106 type,
164163 < / div>
165164 );
166165 },
166+
167167 created () {
168168 if (! this .currentName ) {
169169 this .setCurrentName (' 0' );
170170 }
171+ },
172+
173+ mounted () {
174+ this .calcPaneInstances ();
175+ },
176+
177+ updated () {
178+ this .calcPaneInstances ();
171179 }
172180 };
173181 </script >
Original file line number Diff line number Diff line change @@ -223,19 +223,19 @@ describe('Tabs', () => {
223223 const paneList = vm . $el . querySelector ( '.el-tabs__content' ) . children ;
224224
225225 tabList [ 1 ] . querySelector ( '.el-icon-close' ) . click ( ) ;
226- vm . $nextTick ( _ => {
226+ setTimeout ( _ => {
227227 expect ( tabList . length ) . to . be . equal ( 2 ) ;
228228 expect ( paneList . length ) . to . be . equal ( 2 ) ;
229229 expect ( tabList [ 1 ] . classList . contains ( 'is-active' ) ) . to . be . true ;
230230
231231 vm . $refs . tabs . $el . querySelector ( '.el-tabs__new-tab' ) . click ( ) ;
232- vm . $nextTick ( _ => {
232+ setTimeout ( _ => {
233233 expect ( tabList . length ) . to . be . equal ( 3 ) ;
234234 expect ( paneList . length ) . to . be . equal ( 3 ) ;
235235 expect ( tabList [ 2 ] . classList . contains ( 'is-active' ) ) . to . be . true ;
236236 done ( ) ;
237- } ) ;
238- } ) ;
237+ } , 100 ) ;
238+ } , 100 ) ;
239239 } , 100 ) ;
240240 } ) ;
241241 it ( 'addable & closable' , done => {
@@ -310,19 +310,19 @@ describe('Tabs', () => {
310310
311311 vm . $refs . tabs . $el . querySelector ( '.el-tabs__new-tab' ) . click ( ) ;
312312
313- vm . $nextTick ( _ => {
313+ setTimeout ( _ => {
314314 expect ( tabList . length ) . to . be . equal ( 3 ) ;
315315 expect ( paneList . length ) . to . be . equal ( 3 ) ;
316316 expect ( tabList [ 2 ] . classList . contains ( 'is-active' ) ) . to . be . true ;
317317
318318 tabList [ 2 ] . querySelector ( '.el-icon-close' ) . click ( ) ;
319- vm . $nextTick ( _ => {
319+ setTimeout ( _ => {
320320 expect ( tabList . length ) . to . be . equal ( 2 ) ;
321321 expect ( paneList . length ) . to . be . equal ( 2 ) ;
322322 expect ( tabList [ 1 ] . classList . contains ( 'is-active' ) ) . to . be . true ;
323323 done ( ) ;
324- } ) ;
325- } ) ;
324+ } , 100 ) ;
325+ } , 100 ) ;
326326 } , 100 ) ;
327327 } ) ;
328328 it ( 'closable in tab-pane' , ( done ) => {
You can’t perform that action at this time.
0 commit comments