aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Scope.js14
-rw-r--r--src/apis.js5
-rw-r--r--src/directives.js12
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);