diff --git a/benchmarks/select-ng-value-bp/app.js b/benchmarks/select-ng-value-bp/app.js new file mode 100755 index 000000000000..033f55c23a27 --- /dev/null +++ b/benchmarks/select-ng-value-bp/app.js @@ -0,0 +1,104 @@ +"use strict"; + +/* globals angular, benchmarkSteps */ + +var app = angular.module('selectBenchmark', []); + +app.config(function($compileProvider) { + if ($compileProvider.debugInfoEnabled) { + $compileProvider.debugInfoEnabled(false); + } +}); + + + +app.controller('DataController', function($scope, $element) { + $scope.groups = []; + $scope.count = 10000; + + function changeOptions() { + $scope.groups = []; + var i = 0; + var group; + while(i < $scope.count) { + if (i % 100 === 0) { + group = { + name: 'group-' + $scope.groups.length, + items: [] + }; + $scope.groups.push(group); + } + group.items.push({ + id: i, + label: 'item-' + i + }); + i++; + } + } + + var selectElement = $element.find('select'); + console.log(selectElement); + + + benchmarkSteps.push({ + name: 'add-options', + fn: function() { + $scope.$apply(function() { + $scope.count = 10000; + changeOptions(); + }); + } + }); + + benchmarkSteps.push({ + name: 'set-model-1', + fn: function() { + $scope.$apply(function() { + $scope.x = $scope.groups[10].items[0]; + }); + } + }); + + benchmarkSteps.push({ + name: 'set-model-2', + fn: function() { + $scope.$apply(function() { + $scope.x = $scope.groups[0].items[10]; + }); + } + }); + + benchmarkSteps.push({ + name: 'remove-options', + fn: function() { + $scope.count = 100; + changeOptions(); + } + }); + + benchmarkSteps.push({ + name: 'add-options', + fn: function() { + $scope.$apply(function() { + $scope.count = 10000; + changeOptions(); + }); + } + }); + + benchmarkSteps.push({ + name: 'set-view-1', + fn: function() { + selectElement.val('2000'); + selectElement.triggerHandler('change'); + } + }); + + benchmarkSteps.push({ + name: 'set-view-2', + fn: function() { + selectElement.val('1000'); + selectElement.triggerHandler('change'); + } + }); +}); diff --git a/benchmarks/select-ng-value-bp/bp.conf.js b/benchmarks/select-ng-value-bp/bp.conf.js new file mode 100755 index 000000000000..bf543bb2cef7 --- /dev/null +++ b/benchmarks/select-ng-value-bp/bp.conf.js @@ -0,0 +1,11 @@ +module.exports = function(config) { + config.set({ + scripts: [ { + id: 'angular', + src: '/build/angular.js' + }, + { + src: 'app.js', + }] + }); +}; diff --git a/benchmarks/select-ng-value-bp/main.html b/benchmarks/select-ng-value-bp/main.html new file mode 100755 index 000000000000..273027615288 --- /dev/null +++ b/benchmarks/select-ng-value-bp/main.html @@ -0,0 +1,15 @@ +
+
+
+

+ Tests the execution of a select with ngRepeat'ed options with ngValue for rendering during model + and option updates. +

+ +
+
+
diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index 982a8882f270..df7af367e2d3 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -1743,10 +1743,8 @@ var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; * `ngValue` is useful when dynamically generating lists of radio buttons using * {@link ngRepeat `ngRepeat`}, as shown below. * - * Likewise, `ngValue` can be used to generate `