aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scenario/perf.html32
-rw-r--r--src/Scope.js7
-rw-r--r--src/apis.js2
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;