@@ -76,6 +76,10 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
76
76
bindEvents ( ) ;
77
77
$mdTheming ( $element ) ;
78
78
$mdUtil . nextTick ( function ( ) {
79
+ // Note that the element references need to be updated, because certain "browsers"
80
+ // (IE/Edge) lose them and start throwing "Invalid calling object" errors, when we
81
+ // compile the element contents down in `compileElement`.
82
+ elements = getElements ( ) ;
79
83
updateHeightFromContent ( ) ;
80
84
adjustOffset ( ) ;
81
85
updateInkBarStyles ( ) ;
@@ -91,7 +95,8 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
91
95
*/
92
96
function compileTemplate ( ) {
93
97
var template = $attrs . $mdTabsTemplate ,
94
- element = angular . element ( elements . data ) ;
98
+ element = angular . element ( $element [ 0 ] . querySelector ( 'md-tab-data' ) ) ;
99
+
95
100
element . html ( template ) ;
96
101
$compile ( element . contents ( ) ) ( ctrl . parent ) ;
97
102
delete $attrs . $mdTabsTemplate ;
@@ -219,7 +224,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
219
224
*/
220
225
function handleSelectedIndexChange ( newValue , oldValue ) {
221
226
if ( newValue === oldValue ) return ;
222
-
227
+
223
228
ctrl . selectedIndex = getNearestSafeIndex ( newValue ) ;
224
229
ctrl . lastSelectedIndex = oldValue ;
225
230
ctrl . updateInkBarStyles ( ) ;
@@ -428,19 +433,17 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
428
433
*/
429
434
function getElements ( ) {
430
435
var elements = { } ;
436
+ var node = $element [ 0 ] ;
431
437
432
438
// gather tab bar elements
433
- elements . wrapper = $element [ 0 ] . getElementsByTagName ( 'md-tabs-wrapper' ) [ 0 ] ;
434
- elements . data = $element [ 0 ] . getElementsByTagName ( 'md-tab-data' ) [ 0 ] ;
435
- elements . canvas = elements . wrapper . getElementsByTagName ( 'md-tabs-canvas' ) [ 0 ] ;
436
- elements . paging = elements . canvas . getElementsByTagName ( 'md-pagination-wrapper' ) [ 0 ] ;
437
- elements . tabs = elements . paging . getElementsByTagName ( 'md-tab-item' ) ;
438
- elements . dummies = elements . canvas . getElementsByTagName ( 'md-dummy-tab' ) ;
439
- elements . inkBar = elements . paging . getElementsByTagName ( 'md-ink-bar' ) [ 0 ] ;
440
-
441
- // gather tab content elements
442
- elements . contentsWrapper = $element [ 0 ] . getElementsByTagName ( 'md-tabs-content-wrapper' ) [ 0 ] ;
443
- elements . contents = elements . contentsWrapper . getElementsByTagName ( 'md-tab-content' ) ;
439
+ elements . wrapper = node . querySelector ( 'md-tabs-wrapper' ) ;
440
+ elements . canvas = elements . wrapper . querySelector ( 'md-tabs-canvas' ) ;
441
+ elements . paging = elements . canvas . querySelector ( 'md-pagination-wrapper' ) ;
442
+ elements . inkBar = elements . paging . querySelector ( 'md-ink-bar' ) ;
443
+
444
+ elements . contents = node . querySelectorAll ( 'md-tabs-content-wrapper > md-tab-content' ) ;
445
+ elements . tabs = elements . paging . querySelectorAll ( 'md-tab-item' ) ;
446
+ elements . dummies = elements . canvas . querySelectorAll ( 'md-dummy-tab' ) ;
444
447
445
448
return elements ;
446
449
}
@@ -494,7 +497,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
494
497
function shouldPaginate ( ) {
495
498
if ( ctrl . noPagination || ! loaded ) return false ;
496
499
var canvasWidth = $element . prop ( 'clientWidth' ) ;
497
- angular . forEach ( getElements ( ) . dummies , function ( tab ) { canvasWidth -= tab . offsetWidth ; } ) ;
500
+ angular . forEach ( elements . dummies , function ( tab ) { canvasWidth -= tab . offsetWidth ; } ) ;
498
501
return canvasWidth < 0 ;
499
502
}
500
503
@@ -563,7 +566,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
563
566
function calcPagingWidth ( ) {
564
567
var width = 1 ;
565
568
566
- angular . forEach ( getElements ( ) . dummies , function ( element ) {
569
+ angular . forEach ( elements . dummies , function ( element ) {
567
570
//-- Uses the larger value between `getBoundingClientRect().width` and `offsetWidth`. This
568
571
// prevents `offsetWidth` value from being rounded down and causing wrapping issues, but
569
572
// also handles scenarios where `getBoundingClientRect()` is inaccurate (ie. tabs inside
@@ -613,7 +616,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
613
616
* issues when attempting to focus an item that is out of view.
614
617
*/
615
618
function redirectFocus ( ) {
616
- getElements ( ) . dummies [ ctrl . focusIndex ] . focus ( ) ;
619
+ elements . dummies [ ctrl . focusIndex ] . focus ( ) ;
617
620
}
618
621
619
622
/**
0 commit comments