diff options
| author | Luis Ramón López | 2013-02-26 00:00:47 +0100 | 
|---|---|---|
| committer | Igor Minar | 2013-02-27 00:55:40 -0800 | 
| commit | cf17c6af475eace31cf52944afd8e10d3afcf6c0 (patch) | |
| tree | aa552c9f6b8af0ff0ed208ec6c3a5574432a4109 /test/ng/compileSpec.js | |
| parent | 86d191ed4aea9015adc71b852223475c5c762c34 (diff) | |
| download | angular.js-cf17c6af475eace31cf52944afd8e10d3afcf6c0.tar.bz2 | |
feat($compile): add attribute binding support via ngAttr*
Sometimes is not desirable to use interpolation on attributes because
the user agent parses them before the interpolation takes place. I.e:
<svg>
  <circle cx="{{cx}}" cy="{{cy}}" r="{{r}}"></circle>
</svg>
The snippet throws three browser errors, one for each attribute.
For some attributes, AngularJS fixes that behaviour introducing special
directives like ng-href or ng-src.
This commit is a more general solution that allows prefixing any
attribute with "ng-attr-", "ng:attr:" or "ng_attr_"  so it will
be set only when the binding is done. The prefix is then removed.
Example usage:
<svg>
  <circle ng-attr-cx="{{cx}}" ng-attr-cy="{{cy}}" ng:attr-r="{{r}}"></circle>
</svg>
Closes #1050
Closes #1925
Diffstat (limited to 'test/ng/compileSpec.js')
| -rw-r--r-- | test/ng/compileSpec.js | 37 | 
1 files changed, 37 insertions, 0 deletions
| diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index b9ed3ff9..6f56c6e6 100644 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -2591,4 +2591,41 @@ describe('$compile', function() {        });      });    }); + +  describe('ngAttr* attribute binding', function() { + +    it('should bind after digest but not before', inject(function($compile, $rootScope) { +      $rootScope.name = "Misko"; +      element = $compile('<span ng-attr-test="{{name}}"></span>')($rootScope); +      expect(element.attr('test')).toBeUndefined(); +      $rootScope.$digest(); +      expect(element.attr('test')).toBe('Misko'); +    })); + + +    it('should work with different prefixes', inject(function($compile, $rootScope) { +      $rootScope.name = "Misko"; +      element = $compile('<span ng:attr:test="{{name}}" ng-Attr-test2="{{name}}" ng_Attr_test3="{{name}}"></span>')($rootScope); +      expect(element.attr('test')).toBeUndefined(); +      expect(element.attr('test2')).toBeUndefined(); +      expect(element.attr('test2')).toBeUndefined(); +      $rootScope.$digest(); +      expect(element.attr('test')).toBe('Misko'); +      expect(element.attr('test2')).toBe('Misko'); +      expect(element.attr('test3')).toBe('Misko'); +    })); + + +    it('should work if they are prefixed with x- or data-', inject(function($compile, $rootScope) { +      $rootScope.name = "Misko"; +      element = $compile('<span data-ng-attr-test2="{{name}}" x-ng-attr-test3="{{name}}" data-ng:attr-test4="{{name}}"></span>')($rootScope); +      expect(element.attr('test2')).toBeUndefined(); +      expect(element.attr('test3')).toBeUndefined(); +      expect(element.attr('test4')).toBeUndefined(); +      $rootScope.$digest(); +      expect(element.attr('test2')).toBe('Misko'); +      expect(element.attr('test3')).toBe('Misko'); +      expect(element.attr('test4')).toBe('Misko'); +    })); +  });  }); | 
