Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit 20ba8a5

Browse files
Robert MesserleThomasBurleson
authored andcommitted
fix(tabs): resolves issue with nested tabs
Fixes #4989. Closes #5719.
1 parent 7d8bc2d commit 20ba8a5

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

src/components/tabs/js/tabDirective.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ function MdTab () {
5858
require: '^?mdTabs',
5959
terminal: true,
6060
compile: function (element, attr) {
61-
var label = element.find('md-tab-label'),
62-
body = element.find('md-tab-body');
61+
var label = firstChild(element, 'md-tab-label'),
62+
body = firstChild(element, 'md-tab-body');
6363

6464
if (label.length == 0) {
6565
label = angular.element('<md-tab-label></md-tab-label>');
@@ -88,8 +88,8 @@ function MdTab () {
8888
function postLink (scope, element, attr, ctrl) {
8989
if (!ctrl) return;
9090
var index = ctrl.getTabElementIndex(element),
91-
body = element.find('md-tab-body').eq(0).remove(),
92-
label = element.find('md-tab-label').eq(0).remove(),
91+
body = firstChild(element, 'md-tab-body').remove(),
92+
label = firstChild(element, 'md-tab-label').remove(),
9393
data = ctrl.insertTab({
9494
scope: scope,
9595
parent: scope.$parent,
@@ -114,6 +114,14 @@ function MdTab () {
114114
}
115115
);
116116
scope.$on('$destroy', function () { ctrl.removeTab(data); });
117+
}
117118

119+
function firstChild (element, tagName) {
120+
var children = element[0].children;
121+
for (var i = 0, len = children.length; i < len; i++) {
122+
var child = children[i];
123+
if (child.tagName === tagName.toUpperCase()) return angular.element(child);
124+
}
125+
return angular.element();
118126
}
119127
}

src/components/tabs/tabs.spec.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,4 +336,25 @@ describe('<md-tabs>', function () {
336336
expect(element.find('md-tabs-content-wrapper').hasClass('ng-hide')).toBe(true);
337337
}));
338338
});
339+
340+
describe('nested tabs', function () {
341+
it('should properly nest tabs', inject(function () {
342+
var template = '' +
343+
'<md-tabs>' +
344+
' <md-tab label="one">' +
345+
' <md-tabs>' +
346+
' <md-tab><md-tab-label>a</md-tab-label></md-tab>' +
347+
' <md-tab><md-tab-label>b</md-tab-label></md-tab>' +
348+
' <md-tab><md-tab-label>c</md-tab-label></md-tab>' +
349+
' </md-tabs>' +
350+
' </md-tab>' +
351+
' <md-tab label="two">two</md-tab>' +
352+
'</md-tabs>';
353+
var element = setup(template);
354+
// first item should be 'one'
355+
expect(element.find('md-tab-item').eq(0).text()).toBe('one');
356+
// first item in nested tabs should be 'a'
357+
expect(element.find('md-tabs').find('md-tab-item').eq(0).text()).toBe('a');
358+
}));
359+
});
339360
});

0 commit comments

Comments
 (0)