@@ -32,20 +32,7 @@ function classDirective(name, selector) {
32
32
}
33
33
34
34
if ( name !== 'ngClass' ) {
35
- scope . $watch ( '$index' , function ( $index ) {
36
- // eslint-disable-next-line no-bitwise
37
- var newModulo = $index & 1 ;
38
-
39
- if ( newModulo !== oldModulo ) {
40
- if ( newModulo === selector ) {
41
- addClasses ( oldClassString ) ;
42
- } else {
43
- removeClasses ( oldClassString ) ;
44
- }
45
-
46
- oldModulo = newModulo ;
47
- }
48
- } ) ;
35
+ scope . $watch ( '$index' , ngClassIndexWatchAction ) ;
49
36
}
50
37
51
38
scope . $watch ( watchExpression , watchAction , isOneTime ) ;
@@ -89,6 +76,24 @@ function classDirective(name, selector) {
89
76
return classesToUpdate . join ( ' ' ) ;
90
77
}
91
78
79
+ function ngClassIndexWatchAction ( $index ) {
80
+ // eslint-disable-next-line no-bitwise
81
+ var newModulo = $index & 1 ;
82
+
83
+ if ( newModulo !== oldModulo ) {
84
+ // This watch-action should run before the `ngClass[OneTime]WatchAction()`, thus it
85
+ // adds/removes `oldClassString`. If the `ngClass` expression has changed as well, the
86
+ // `ngClass[OneTime]WatchAction()` will update the classes.
87
+ if ( newModulo === selector ) {
88
+ addClasses ( oldClassString ) ;
89
+ } else {
90
+ removeClasses ( oldClassString ) ;
91
+ }
92
+
93
+ oldModulo = newModulo ;
94
+ }
95
+ }
96
+
92
97
function ngClassOneTimeWatchAction ( newClassValue ) {
93
98
var newClassString = toClassString ( newClassValue ) ;
94
99
0 commit comments