diff options
| -rw-r--r-- | src/Scope.js | 14 | ||||
| -rw-r--r-- | src/apis.js | 5 | ||||
| -rw-r--r-- | src/directives.js | 12 |
3 files changed, 14 insertions, 17 deletions
diff --git a/src/Scope.js b/src/Scope.js index 6d68eeed..bed0ff6d 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -46,16 +46,16 @@ function setter(instance, path, value){ var compileCache = {}; function expressionCompile(exp){ if (isFunction(exp)) return exp; - var expFn = compileCache[exp]; - if (!expFn) { + var fn = compileCache[exp]; + if (!fn) { var parser = new Parser(exp); - expFn = parser.statements(); + var fnSelf = parser.statements(); parser.assertAllConsumed(); - compileCache[exp] = expFn; + fn = compileCache[exp] = extend( + function(){ return fnSelf(this);}, + {fnSelf: fnSelf}); } - return function(){ - return expFn(this); - }; + return fn; } function rethrow(e) { throw e; } diff --git a/src/apis.js b/src/apis.js index fda28346..1acc143b 100644 --- a/src/apis.js +++ b/src/apis.js @@ -296,10 +296,7 @@ var angularFunction = { if (isFunction(expression)){ return expression; } else if (expression){ - var fn = expressionCompile(expression); - return function($) { - return fn.apply($); - }; + return expressionCompile(expression).fnSelf; } else { return identity; } diff --git a/src/directives.js b/src/directives.js index 0a3e10ed..91a98735 100644 --- a/src/directives.js +++ b/src/directives.js @@ -155,16 +155,16 @@ angularWidget("@ng-repeat", function(expression, element){ this.$onEval(function(){ var index = 0, childCount = children.length, childScope, lastElement = reference; foreach(this.$tryEval(rhs, reference), function(value, key){ - function assign(scope) { - scope[valueIdent] = value; - if (keyIdent) scope[keyIdent] = key; - } if (index < childCount) { // reuse existing child - assign(childScope = children[index]); + childScope = children[index]; + childScope[valueIdent] = value; + if (keyIdent) childScope[keyIdent] = key; } else { // grow children - assign(childScope = template(element.clone(), createScope(currentScope))); + childScope = template(element.clone(), createScope(currentScope)); + childScope[valueIdent] = value; + if (keyIdent) childScope[keyIdent] = key; lastElement.after(childScope.$element); childScope.$index = index; childScope.$element.attr('ng-repeat-index', index); |
