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) {