8
8
9
9
function classDirective ( name , selector ) {
10
10
name = 'ngClass' + name ;
11
+ var indexWatchExpression ;
11
12
12
- return [ function ( ) {
13
+ return [ '$parse' , function ( $parse ) {
13
14
return {
14
15
restrict : 'AC' ,
15
16
link : function ( scope , element , attr ) {
16
17
var classCounts = element . data ( '$classCounts' ) ;
18
+ var oldModulo = true ;
17
19
var oldVal ;
18
20
19
21
if ( ! classCounts ) {
@@ -24,18 +26,22 @@ function classDirective(name, selector) {
24
26
}
25
27
26
28
if ( name !== 'ngClass' ) {
27
- scope . $watch ( '$index' , function ( $index , old$index ) {
28
- /* eslint-disable no-bitwise */
29
- var mod = $index & 1 ;
30
- if ( mod !== ( old$index & 1 ) ) {
31
- var classes = arrayClasses ( oldVal ) ;
32
- if ( mod === selector ) {
33
- addClasses ( classes ) ;
34
- } else {
35
- removeClasses ( classes ) ;
36
- }
29
+ if ( ! indexWatchExpression ) {
30
+ indexWatchExpression = $parse ( '$index' , function moduloTwo ( $index ) {
31
+ // eslint-disable-next-line no-bitwise
32
+ return $index & 1 ;
33
+ } ) ;
34
+ }
35
+
36
+ scope . $watch ( indexWatchExpression , function ( newModulo ) {
37
+ var classes = arrayClasses ( oldVal ) ;
38
+ if ( newModulo === selector ) {
39
+ addClasses ( classes ) ;
40
+ } else {
41
+ removeClasses ( classes ) ;
37
42
}
38
- /* eslint-enable */
43
+
44
+ oldModulo = newModulo ;
39
45
} ) ;
40
46
}
41
47
@@ -77,8 +83,7 @@ function classDirective(name, selector) {
77
83
}
78
84
79
85
function ngClassWatchAction ( newVal ) {
80
- // eslint-disable-next-line no-bitwise
81
- if ( selector === true || ( scope . $index & 1 ) === selector ) {
86
+ if ( oldModulo === selector ) {
82
87
var newClasses = arrayClasses ( newVal || [ ] ) ;
83
88
if ( ! oldVal ) {
84
89
addClasses ( newClasses ) ;
0 commit comments