diff --git a/src/ng/directive/ngClass.js b/src/ng/directive/ngClass.js index d96169042f7c..3e959c1d3d75 100644 --- a/src/ng/directive/ngClass.js +++ b/src/ng/directive/ngClass.js @@ -96,12 +96,15 @@ function classDirective(name, selector) { } function arrayClasses(classVal) { + var classes = []; if (isArray(classVal)) { - return classVal.join(' ').split(' '); + forEach(classVal, function(v) { + classes = classes.concat(arrayClasses(v)); + }); + return classes; } else if (isString(classVal)) { return classVal.split(' '); } else if (isObject(classVal)) { - var classes = []; forEach(classVal, function(v, k) { if (v) { classes = classes.concat(k.split(' ')); @@ -167,10 +170,14 @@ function classDirective(name, selector) {


+
+

Using Array and Map Syntax

+
+ warning (apply "orange" class) .strike { - text-decoration: line-through; + text-decoration: line-through; } .bold { font-weight: bold; @@ -178,6 +185,9 @@ function classDirective(name, selector) { .red { color: red; } + .orange { + color: orange; + } var ps = element.all(by.css('p')); @@ -202,11 +212,18 @@ function classDirective(name, selector) { }); it('array example should have 3 classes', function() { - expect(ps.last().getAttribute('class')).toBe(''); + expect(ps.get(2).getAttribute('class')).toBe(''); element(by.model('style1')).sendKeys('bold'); element(by.model('style2')).sendKeys('strike'); element(by.model('style3')).sendKeys('red'); - expect(ps.last().getAttribute('class')).toBe('bold strike red'); + expect(ps.get(2).getAttribute('class')).toBe('bold strike red'); + }); + + it('array with map example should have 2 classes', function() { + expect(ps.last().getAttribute('class')).toBe(''); + element(by.model('style4')).sendKeys('bold'); + element(by.model('warning')).click(); + expect(ps.last().getAttribute('class')).toBe('bold orange'); }); diff --git a/test/ng/directive/ngClassSpec.js b/test/ng/directive/ngClassSpec.js index 2b174dcc2a91..0967aa5898fa 100644 --- a/test/ng/directive/ngClassSpec.js +++ b/test/ng/directive/ngClassSpec.js @@ -63,6 +63,17 @@ describe('ngClass', function() { expect(element.hasClass('AnotB')).toBeFalsy(); })); + it('should support adding multiple classes via an array mixed with conditionally via a map', inject(function($rootScope, $compile) { + element = $compile('
')($rootScope); + $rootScope.$digest(); + expect(element.hasClass('existing')).toBeTruthy(); + expect(element.hasClass('A')).toBeTruthy(); + expect(element.hasClass('B')).toBeFalsy(); + $rootScope.condition = true; + $rootScope.$digest(); + expect(element.hasClass('B')).toBeTruthy(); + + })); it('should remove classes when the referenced object is the same but its property is changed', inject(function($rootScope, $compile) {