mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-09 07:14:44 +00:00
fix(ng:class): preserve classes added post compilation
- make sure ng:class preserve classes added after compilation Closes #355
This commit is contained in:
parent
8a8a2cf462
commit
2428907259
2 changed files with 56 additions and 10 deletions
|
|
@ -568,18 +568,25 @@ angularDirective("ng:submit", function(expression, element) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function ngClass(selector) {
|
function ngClass(selector) {
|
||||||
return function(expression, element){
|
return function(expression, element){
|
||||||
var existing = element[0].className + ' ';
|
|
||||||
return function(element){
|
return function(element){
|
||||||
this.$onEval(function(){
|
if(selector(this.$index)) {
|
||||||
if (selector(this.$index)) {
|
this.$watch(expression, function(newCls, oldCls) {
|
||||||
var value = this.$eval(expression);
|
var cls = element.attr('class');
|
||||||
if (isArray(value)) value = value.join(' ');
|
if (isArray(newCls)) newCls = newCls.join(' ');
|
||||||
element[0].className = trim(existing + value);
|
if (isArray(oldCls)) oldCls = oldCls.join(' ');
|
||||||
}
|
|
||||||
}, element);
|
// The time when newCls == oldCLs is when $watch just started
|
||||||
|
if (newCls == oldCls) {
|
||||||
|
cls += ' ' + newCls;
|
||||||
|
} else {
|
||||||
|
cls = cls.replace(' ' + oldCls, ' ' + newCls);
|
||||||
|
}
|
||||||
|
|
||||||
|
element.attr('class', cls);
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,7 @@ describe("directive", function(){
|
||||||
|
|
||||||
|
|
||||||
describe('ng:class', function() {
|
describe('ng:class', function() {
|
||||||
it('should add new and remove old classes dynamically', function() {
|
it('should change current class or remove old classes dynamically', function() {
|
||||||
var scope = compile('<div class="existing" ng:class="dynClass"></div>');
|
var scope = compile('<div class="existing" ng:class="dynClass"></div>');
|
||||||
scope.dynClass = 'A';
|
scope.dynClass = 'A';
|
||||||
scope.$eval();
|
scope.$eval();
|
||||||
|
|
@ -204,6 +204,45 @@ describe("directive", function(){
|
||||||
expect(element.hasClass('A')).toBeTruthy();
|
expect(element.hasClass('A')).toBeTruthy();
|
||||||
expect(element.hasClass('B')).toBeTruthy();
|
expect(element.hasClass('B')).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should preserve class added post compilation', function() {
|
||||||
|
var scope = compile('<div class="existing" ng:class="dynClass"></div>');
|
||||||
|
scope.dynClass = 'A';
|
||||||
|
scope.$eval();
|
||||||
|
expect(element.hasClass('existing')).toBe(true);
|
||||||
|
|
||||||
|
// add extra class, change model and eval
|
||||||
|
element.addClass('newClass');
|
||||||
|
scope.dynClass = 'B';
|
||||||
|
scope.$eval();
|
||||||
|
|
||||||
|
expect(element.hasClass('existing')).toBe(true);
|
||||||
|
expect(element.hasClass('B')).toBe(true);
|
||||||
|
expect(element.hasClass('newClass')).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should preserve class added post compilation even without existing classes"', function() {
|
||||||
|
var scope = compile('<div ng:class="dynClass"></div>');
|
||||||
|
scope.dynClass = 'A';
|
||||||
|
scope.$eval();
|
||||||
|
expect(element.hasClass('A')).toBe(true);
|
||||||
|
|
||||||
|
// add extra class, change model and eval
|
||||||
|
element.addClass('newClass');
|
||||||
|
scope.dynClass = 'B';
|
||||||
|
scope.$eval();
|
||||||
|
|
||||||
|
expect(element.hasClass('B')).toBe(true);
|
||||||
|
expect(element.hasClass('newClass')).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should preserve right classes"', function() {
|
||||||
|
var scope = compile('<div class="ui-panel ui-selected" ng:class="dynCls"></div>');
|
||||||
|
scope.dynCls = 'panel';
|
||||||
|
scope.dynCls = 'foo';
|
||||||
|
scope.$eval();
|
||||||
|
expect(element.attr('class')).toBe('ui-panel ui-selected ng-directive foo');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue