aboutsummaryrefslogtreecommitdiffstats
path: root/src/ng/compile.js
diff options
context:
space:
mode:
authorLuis Ramón López2013-02-26 00:00:47 +0100
committerIgor Minar2013-02-27 00:55:40 -0800
commitcf17c6af475eace31cf52944afd8e10d3afcf6c0 (patch)
treeaa552c9f6b8af0ff0ed208ec6c3a5574432a4109 /src/ng/compile.js
parent86d191ed4aea9015adc71b852223475c5c762c34 (diff)
downloadangular.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 'src/ng/compile.js')
-rw-r--r--src/ng/compile.js10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/ng/compile.js b/src/ng/compile.js
index 48beb61e..3746bb66 100644
--- a/src/ng/compile.js
+++ b/src/ng/compile.js
@@ -349,7 +349,8 @@ function $CompileProvider($provide) {
? identity
: function denormalizeTemplate(template) {
return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
- };
+ },
+ NG_ATTR_BINDING = /^ngAttr[A-Z]/;
return compile;
@@ -514,11 +515,16 @@ function $CompileProvider($provide) {
directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority);
// iterate over the attributes
- for (var attr, name, nName, value, nAttrs = node.attributes,
+ for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes,
j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
attr = nAttrs[j];
if (attr.specified) {
name = attr.name;
+ // support ngAttr attribute binding
+ ngAttrName = directiveNormalize(name);
+ if (NG_ATTR_BINDING.test(ngAttrName)) {
+ name = ngAttrName.substr(6).toLowerCase();
+ }
nName = directiveNormalize(name.toLowerCase());
attrsMap[nName] = name;
attrs[nName] = value = trim((msie && name == 'href')