diff options
| author | Max Martinsson | 2012-06-06 16:23:07 +0200 | 
|---|---|---|
| committer | Igor Minar | 2012-06-08 16:07:15 -0700 | 
| commit | fb99b539b4d851773b43f1564f7032adb157c0db (patch) | |
| tree | 75cc5decf994bf4dd4c556c04f43381705317cd5 | |
| parent | 10f80d7d2918f98262090b425ecc294d9518aa7e (diff) | |
| download | angular.js-fb99b539b4d851773b43f1564f7032adb157c0db.tar.bz2 | |
fix($compile): correctly merge class attr for replace directives
Merging of interpolated class attribute from directive template with replace:true works
Closes #1006
| -rw-r--r-- | src/ng/compile.js | 3 | ||||
| -rw-r--r-- | test/ng/compileSpec.js | 16 | 
2 files changed, 19 insertions, 0 deletions
| diff --git a/src/ng/compile.js b/src/ng/compile.js index e1aba35b..1dbb63be 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -865,6 +865,7 @@ function $CompileProvider($provide) {        var srcAttr = src.$attr,            dstAttr = dst.$attr,            $element = dst.$$element; +        // reapply the old attributes to the new element        forEach(dst, function(value, key) {          if (key.charAt(0) != '$') { @@ -874,10 +875,12 @@ function $CompileProvider($provide) {            dst.$set(key, value, true, srcAttr[key]);          }        }); +        // copy the new attributes on the old attrs object        forEach(src, function(value, key) {          if (key == 'class') {            safeAddClass($element, value); +          dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;          } else if (key == 'style') {            $element.attr('style', $element.attr('style') + ';' + value);          } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index 93183b93..31a83648 100644 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -388,6 +388,14 @@ describe('$compile', function() {                expect(element).toBe(attr.$$element);              }            })); +          directive('replaceWithInterpolatedClass', valueFn({ +            replace: true, +            template: '<div class="class_{{1+1}}">Replace with interpolated class!</div>', +            compile: function(element, attr) { +              attr.$set('compiled', 'COMPILED'); +              expect(element).toBe(attr.$$element); +	    } +          }));          })); @@ -466,6 +474,14 @@ describe('$compile', function() {          })); +        it('should handle interpolated css from replacing directive', inject( +            function($compile, $rootScope) { +          element = $compile('<div replace-with-interpolated-class></div>')($rootScope); +          $rootScope.$digest(); +          expect(element).toHaveClass('class_2'); +        })); + +          it('should merge interpolated css class', inject(function($compile, $rootScope) {            element = $compile('<div class="one {{cls}} three" replace></div>')($rootScope); | 
