diff options
| -rw-r--r-- | scenario/perf.html | 32 | ||||
| -rw-r--r-- | src/Scope.js | 7 | ||||
| -rw-r--r-- | src/apis.js | 2 |
3 files changed, 37 insertions, 4 deletions
diff --git a/scenario/perf.html b/scenario/perf.html new file mode 100644 index 00000000..c2f26317 --- /dev/null +++ b/scenario/perf.html @@ -0,0 +1,32 @@ + <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <link rel="stylesheet" type="text/css" href="style.css"/> + <script type="text/javascript" src="../src/angular-bootstrap.js#autobind"></script> + <script type="text/javascript"> + function PerfCntl(){} + PerfCntl.prototype = { + createItems: function(){ + var items = []; + for ( var i = 0; i < 100; i++) { + var item = { + name: "" + Math.random(), + parts: [Math.random(), Math.random()] + }; + items.push(item); + } + return items; + } + }; + </script> + </head> + <body ng:init="$window.$scope = this; items = createItems()" ng-controller="PerfCntl"> + <input type="text" name="text"/> + <hr/> + <ul> + <li ng-repeat="item in items.$filter('').$orderBy('name')"> + {{item.name}} {{item.parts.join(', ')}} + </li> + </ul> + </body> + </html> diff --git a/src/Scope.js b/src/Scope.js index fe0b6ce3..70869b3b 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -60,11 +60,12 @@ function expressionCompile(exp){ // TODO(remove this hack) function parserNewScopeAdapter(fn) { return function(){ + var self = this; return fn({ - state: this, + state: self, scope: { - set: this.$set, - get: this.$get + set: function(key, value){ return setter(self, key, value);}, + get: function(key) { return getter(self, key); } } }); }; diff --git a/src/apis.js b/src/apis.js index 5864ad60..166ca27c 100644 --- a/src/apis.js +++ b/src/apis.js @@ -297,7 +297,7 @@ var angularFunction = { return expression; } else if (expression){ return function($) { - return createScope($).$eval(expression); + return expressionCompile(expression).apply($); }; } else { return identity; |
