Skip to content

Commit 6fb4bf4

Browse files
Di PengIgorMinar
Di Peng
authored andcommitted
fix(directives): make ng:class-even/odd work with ng:class
Closes angular#508
1 parent cc604b6 commit 6fb4bf4

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

src/directives.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -571,9 +571,14 @@ function ngClass(selector) {
571571
var existing = element[0].className + ' ';
572572
return function(element){
573573
this.$onEval(function(){
574-
if (selector(this.$index)) {
575-
var value = this.$eval(expression);
574+
var scope = this;
575+
576+
if (selector(scope.$index)) {
577+
var ngClassVal = scope.$eval(element.attr('ng:class') || '');
578+
if (isArray(ngClassVal)) ngClassVal = ngClassVal.join(' ');
579+
var value = scope.$eval(expression);
576580
if (isArray(value)) value = value.join(' ');
581+
if (ngClassVal && ngClassVal !== value) value = value + ' ' + ngClassVal;
577582
element[0].className = trim(existing + value);
578583
}
579584
}, element);

test/directivesSpec.js

+44
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,50 @@ describe("directive", function(){
220220
expect(e2.hasClass('even')).toBeTruthy();
221221
});
222222

223+
224+
it('should allow both ng:class and ng:class-odd/even on the same element', function() {
225+
var scope = compile('<ul>' +
226+
'<li ng:repeat="i in [0,1]" ng:class="\'plainClass\'" ' +
227+
'ng:class-odd="\'odd\'" ng:class-even="\'even\'"></li>' +
228+
'<ul>');
229+
scope.$eval();
230+
var e1 = jqLite(element[0].childNodes[1]);
231+
var e2 = jqLite(element[0].childNodes[2]);
232+
233+
expect(e1.hasClass('plainClass')).toBeTruthy();
234+
expect(e1.hasClass('odd')).toBeTruthy();
235+
expect(e1.hasClass('even')).toBeFalsy();
236+
expect(e2.hasClass('plainClass')).toBeTruthy();
237+
expect(e2.hasClass('even')).toBeTruthy();
238+
expect(e2.hasClass('odd')).toBeFalsy();
239+
});
240+
241+
242+
it('should allow both ng:class and ng:class-odd/even with multiple classes', function() {
243+
var scope = compile('<ul>' +
244+
'<li ng:repeat="i in [0,1]" ng:class="[\'A\', \'B\']" ' +
245+
'ng:class-odd="[\'C\', \'D\']" ng:class-even="[\'E\', \'F\']"></li>' +
246+
'<ul>');
247+
scope.$eval();
248+
var e1 = jqLite(element[0].childNodes[1]);
249+
var e2 = jqLite(element[0].childNodes[2]);
250+
251+
expect(e1.hasClass('A')).toBeTruthy();
252+
expect(e1.hasClass('B')).toBeTruthy();
253+
expect(e1.hasClass('C')).toBeTruthy();
254+
expect(e1.hasClass('D')).toBeTruthy();
255+
expect(e1.hasClass('E')).toBeFalsy();
256+
expect(e1.hasClass('F')).toBeFalsy();
257+
258+
expect(e2.hasClass('A')).toBeTruthy();
259+
expect(e2.hasClass('B')).toBeTruthy();
260+
expect(e2.hasClass('E')).toBeTruthy();
261+
expect(e2.hasClass('F')).toBeTruthy();
262+
expect(e2.hasClass('C')).toBeFalsy();
263+
expect(e2.hasClass('D')).toBeFalsy();
264+
});
265+
266+
223267
describe('ng:style', function(){
224268
it('should set', function(){
225269
var scope = compile('<div ng:style="{height: \'40px\'}"></div>');

0 commit comments

Comments
 (0)