diff options
Diffstat (limited to 'src/directives.js')
| -rw-r--r-- | src/directives.js | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/directives.js b/src/directives.js index 291bea11..de68360e 100644 --- a/src/directives.js +++ b/src/directives.js @@ -15,7 +15,7 @@ angularDirective("ng-bind", function(expression){ return function(element) { var lastValue; this.$onEval(function() { - var value = templateFn.call(this); + var value = templateFn.call(this, element); if (value != lastValue) { element.text(value); lastValue = value; @@ -31,16 +31,20 @@ function compileBindTemplate(template){ var bindings = []; foreach(parseBindings(template), function(text){ var exp = binding(text); - bindings.push(exp ? function(){ - return this.$eval(exp); - } : function(){ + bindings.push(exp ? function(element){ + var error, value = this.$tryEval(exp, function(e){ + error = toJson(e); + }); + elementError(element, NG_EXCEPTION, error); + return error ? error : value; + } : function() { return text; }); }); - bindTemplateCache[template] = fn = function(){ + bindTemplateCache[template] = fn = function(element){ var parts = [], self = this; foreach(bindings, function(fn){ - var value = fn.call(self); + var value = fn.call(self, element); if (isObject(value)) value = toJson(value, true); parts.push(value); }); @@ -54,7 +58,7 @@ angularDirective("ng-bind-template", function(expression){ return function(element) { var lastValue; this.$onEval(function() { - var value = templateFn.call(this); + var value = templateFn.call(this, element); if (value != lastValue) { element.text(value); lastValue = value; @@ -67,7 +71,7 @@ angularDirective("ng-bind-attr", function(expression){ return function(element){ this.$onEval(function(){ foreach(this.$eval(expression), function(bindExp, key) { - var value = compileBindTemplate(bindExp).call(this); + var value = compileBindTemplate(bindExp).call(this, element); if (key == 'disabled' && !toBoolean(value)) { element.removeAttr('disabled'); } else { @@ -135,12 +139,13 @@ angularWidget("@ng-repeat", function(expression, element){ }; }); -angularDirective("ng-action", function(expression, element){ +angularDirective("ng-click", function(expression, element){ return function(element){ var self = this; element.click(function(){ self.$tryEval(expression, element); self.$eval(); + return false; }); }; }); @@ -167,7 +172,7 @@ function ngClass(selector) { var value = this.$eval(expression); if (selector(this.$index)) { if (isArray(value)) value = value.join(' '); - element[0].className = (existing + value).replace(/\s\s+/g, ' '); + element[0].className = trim(existing + value); } }, element); }; @@ -175,8 +180,8 @@ function ngClass(selector) { } angularDirective("ng-class", ngClass(function(){return true;})); -angularDirective("ng-class-odd", ngClass(function(i){return i % 2 == 1;})); -angularDirective("ng-class-even", ngClass(function(i){return i % 2 == 0;})); +angularDirective("ng-class-odd", ngClass(function(i){return i % 2 == 0;})); +angularDirective("ng-class-even", ngClass(function(i){return i % 2 == 1;})); angularDirective("ng-show", function(expression, element){ return function(element){ |
