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

Commit 27783df

Browse files
author
Robert Messerle
committed
feat(tabs): setting md-selected to -1 will allow md-tabs to function without forcing a tab to be selected
Closes #3172
1 parent 9931e2a commit 27783df

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

src/components/tabs/js/tabsController.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
485485
* @returns {*}
486486
*/
487487
function getNearestSafeIndex (newIndex) {
488+
if (newIndex === -1) return -1;
488489
var maxOffset = Math.max(ctrl.tabs.length - newIndex, newIndex),
489490
i, tab;
490491
for (i = 0; i <= maxOffset; i++) {

src/components/tabs/js/tabsDirective.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ function MdTabs ($mdTheming, $mdUtil, $compile) {
170170
</div>\
171171
</md-tabs-canvas>\
172172
</md-tabs-wrapper>\
173-
<md-tabs-content-wrapper ng-show="$mdTabsCtrl.hasContent">\
173+
<md-tabs-content-wrapper ng-show="$mdTabsCtrl.hasContent && $mdTabsCtrl.selectedIndex >= 0">\
174174
<md-tab-content\
175175
id="tab-content-{{::tab.id}}"\
176176
role="tabpanel"\

src/components/tabs/tabs.spec.js

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ describe('<md-tabs>', function () {
3636
});
3737
});
3838

39-
function setup (template) {
39+
function setup (template, scope) {
4040
var el;
4141
inject(function ($compile, $rootScope) {
42-
el = $compile(template)($rootScope.$new());
43-
$rootScope.$apply();
42+
newScope = $rootScope.$new();
43+
for (var key in scope || {}) newScope[key] = scope[key];
44+
el = $compile(template)(newScope);
45+
newScope.$apply();
4446
});
4547
return el;
4648
}
@@ -287,14 +289,30 @@ describe('<md-tabs>', function () {
287289
</md-tab>\
288290
</md-tabs>\
289291
';
290-
var element = setup(template);
291-
var button = element.find('md-button');
292+
var element = setup(template);
293+
var button = element.find('md-button');
292294

293-
expect(button[0 ].tagName).toBe('MD-BUTTON');
295+
expect(button[ 0 ].tagName).toBe('MD-BUTTON');
294296

295297
button.triggerHandler('click');
296298

297299
expect(element.scope().data).toBe(false);
298300
});
299301
});
302+
303+
describe('no tab selected', function () {
304+
it('should allow cases where no tabs are selected', inject(function () {
305+
var template = '\
306+
<md-tabs md-selected="selectedIndex">\
307+
<md-tab label="a">tab content</md-tab>\
308+
<md-tab label="b">tab content</md-tab>\
309+
</md-tabs>\
310+
';
311+
var element = setup(template, { selectedIndex: -1 });
312+
var scope = element.scope();
313+
314+
expect(scope.selectedIndex).toBe(-1);
315+
expect(element.find('md-tabs-content-wrapper').hasClass('ng-hide')).toBe(true);
316+
}));
317+
});
300318
});

0 commit comments

Comments
 (0)