diff options
| author | Misko Hevery | 2011-08-12 08:57:21 -0700 |
|---|---|---|
| committer | Misko Hevery | 2011-08-12 15:48:12 -0700 |
| commit | 13e7df68a65b0dd2eb4eed673f7b8e3e702d72a9 (patch) | |
| tree | 011b94faf6765790eea9df97f94d8c9cca96dc57 /src | |
| parent | 42062dab34192d2cb9ed66a720c0f791408c61c0 (diff) | |
| download | angular.js-13e7df68a65b0dd2eb4eed673f7b8e3e702d72a9.tar.bz2 | |
perf(scope): re-enable statement cacheing
Diffstat (limited to 'src')
| -rw-r--r-- | src/Scope.js | 4 | ||||
| -rw-r--r-- | src/directives.js | 3 | ||||
| -rw-r--r-- | src/widgets.js | 18 |
3 files changed, 12 insertions, 13 deletions
diff --git a/src/Scope.js b/src/Scope.js index bd402744..ffac1317 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -433,7 +433,7 @@ Scope.prototype = { */ $eval: function(expr) { var fn = isString(expr) - ? parser(expr).statements() + ? expressionCompile(expr) : expr || noop; return fn(this); }, @@ -495,7 +495,7 @@ Scope.prototype = { function compileToFn(exp, name) { var fn = isString(exp) - ? parser(exp).statements() + ? expressionCompile(exp) : exp; assertArgFn(fn, name); return fn; diff --git a/src/directives.js b/src/directives.js index dd292de8..8ba5bace 100644 --- a/src/directives.js +++ b/src/directives.js @@ -205,6 +205,7 @@ angularDirective("ng:controller", function(expression){ */ angularDirective("ng:bind", function(expression, element){ element.addClass('ng-binding'); + var exprFn = parser(expression).statements(); return function(element) { var lastValue = noop, lastError = noop; this.$watch(function(scope) { @@ -215,7 +216,7 @@ angularDirective("ng:bind", function(expression, element){ // TODO(misko): get rid of $element https://github.com/angular/angular.js/issues/348 scope.$element = element; try { - value = scope.$eval(expression); + value = exprFn(scope); } catch (e) { scope.$service('$exceptionHandler')(e); error = formatError(e); diff --git a/src/widgets.js b/src/widgets.js index 3d034fc5..d9af21c9 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -526,23 +526,21 @@ function inputWidget(events, modelAccessor, viewAccessor, initFn, textBox) { var scope = this, model = modelAccessor(scope, element), view = viewAccessor(scope, element), - action = element.attr('ng:change') || noop, + ngChange = element.attr('ng:change') || noop, lastValue; if (model) { initFn.call(scope, model, view, element); scope.$eval(element.attr('ng:init') || noop); element.bind(events, function(event){ function handler(){ - scope.$apply(function() { - var value = view.get(); - if (!textBox || value != lastValue) { - model.set(value); - lastValue = model.get(); - scope.$eval(action); - } - }); + var value = view.get(); + if (!textBox || value != lastValue) { + model.set(value); + lastValue = model.get(); + scope.$eval(ngChange); + } } - event.type == 'keydown' ? $defer(handler) : handler(); + event.type == 'keydown' ? $defer(handler) : scope.$apply(handler); }); scope.$watch(model.get, function(scope, value) { if (!equals(lastValue, value)) { |
