Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit fb99b53

Browse files
maxmartIgorMinar
authored andcommitted
fix($compile): correctly merge class attr for replace directives
Merging of interpolated class attribute from directive template with replace:true works Closes #1006
1 parent 10f80d7 commit fb99b53

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/ng/compile.js

+3
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,7 @@ function $CompileProvider($provide) {
865865
var srcAttr = src.$attr,
866866
dstAttr = dst.$attr,
867867
$element = dst.$$element;
868+
868869
// reapply the old attributes to the new element
869870
forEach(dst, function(value, key) {
870871
if (key.charAt(0) != '$') {
@@ -874,10 +875,12 @@ function $CompileProvider($provide) {
874875
dst.$set(key, value, true, srcAttr[key]);
875876
}
876877
});
878+
877879
// copy the new attributes on the old attrs object
878880
forEach(src, function(value, key) {
879881
if (key == 'class') {
880882
safeAddClass($element, value);
883+
dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;
881884
} else if (key == 'style') {
882885
$element.attr('style', $element.attr('style') + ';' + value);
883886
} else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {

test/ng/compileSpec.js

+16
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,14 @@ describe('$compile', function() {
388388
expect(element).toBe(attr.$$element);
389389
}
390390
}));
391+
directive('replaceWithInterpolatedClass', valueFn({
392+
replace: true,
393+
template: '<div class="class_{{1+1}}">Replace with interpolated class!</div>',
394+
compile: function(element, attr) {
395+
attr.$set('compiled', 'COMPILED');
396+
expect(element).toBe(attr.$$element);
397+
}
398+
}));
391399
}));
392400

393401

@@ -466,6 +474,14 @@ describe('$compile', function() {
466474
}));
467475

468476

477+
it('should handle interpolated css from replacing directive', inject(
478+
function($compile, $rootScope) {
479+
element = $compile('<div replace-with-interpolated-class></div>')($rootScope);
480+
$rootScope.$digest();
481+
expect(element).toHaveClass('class_2');
482+
}));
483+
484+
469485
it('should merge interpolated css class', inject(function($compile, $rootScope) {
470486
element = $compile('<div class="one {{cls}} three" replace></div>')($rootScope);
471487

0 commit comments

Comments
 (0)