aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMisko Hevery2011-08-12 08:57:21 -0700
committerMisko Hevery2011-08-12 15:48:12 -0700
commit13e7df68a65b0dd2eb4eed673f7b8e3e702d72a9 (patch)
tree011b94faf6765790eea9df97f94d8c9cca96dc57 /src
parent42062dab34192d2cb9ed66a720c0f791408c61c0 (diff)
downloadangular.js-13e7df68a65b0dd2eb4eed673f7b8e3e702d72a9.tar.bz2
perf(scope): re-enable statement cacheing
Diffstat (limited to 'src')
-rw-r--r--src/Scope.js4
-rw-r--r--src/directives.js3
-rw-r--r--src/widgets.js18
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)) {