Skip to content

Commit baddb32

Browse files
committed
refactor(ngClass): simplify conditions
1 parent f31df40 commit baddb32

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

src/ng/directive/ngClass.js

+19-14
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88

99
function classDirective(name, selector) {
1010
name = 'ngClass' + name;
11+
var indexWatchExpression;
1112

12-
return [function() {
13+
return ['$parse', function($parse) {
1314
return {
1415
restrict: 'AC',
1516
link: function(scope, element, attr) {
1617
var classCounts = element.data('$classCounts');
18+
var oldModulo = true;
1719
var oldVal;
1820

1921
if (!classCounts) {
@@ -24,18 +26,22 @@ function classDirective(name, selector) {
2426
}
2527

2628
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);
3742
}
38-
/* eslint-enable */
43+
44+
oldModulo = newModulo;
3945
});
4046
}
4147

@@ -77,8 +83,7 @@ function classDirective(name, selector) {
7783
}
7884

7985
function ngClassWatchAction(newVal) {
80-
// eslint-disable-next-line no-bitwise
81-
if (selector === true || (scope.$index & 1) === selector) {
86+
if (oldModulo === selector) {
8287
var newClasses = arrayClasses(newVal || []);
8388
if (!oldVal) {
8489
addClasses(newClasses);

0 commit comments

Comments
 (0)