diff --git a/dist/select.js b/dist/select.js old mode 100755 new mode 100644 diff --git a/dist/select.min.js b/dist/select.min.js old mode 100755 new mode 100644 diff --git a/examples/demo-multi-select.html b/examples/demo-multi-select.html index 81e495ac7..26c0062e6 100644 --- a/examples/demo-multi-select.html +++ b/examples/demo-multi-select.html @@ -177,6 +177,24 @@

Array of objects (with groupBy)

Selected: {{multipleDemo.selectedPeopleWithGroupBy}}

+
+

Populate multi select

+

+ + +

+ + {{$item.name}} <{{$item.email}}> + +
+ + email: {{person.email}} + age: + +
+
+

Selected: {{multipleDemo.populateSelection}}

+
diff --git a/examples/demo.js b/examples/demo.js index e0cd943a8..88b8a997b 100644 --- a/examples/demo.js +++ b/examples/demo.js @@ -140,6 +140,18 @@ app.controller('DemoCtrl', function($scope, $http, $timeout) { }); }; + $scope.populate = function(persons) { + if (!persons) { + return; + } + $scope.multipleDemo.populateSelection = []; + $timeout(function() { + angular.forEach(persons, function(value) { + $scope.multipleDemo.populateSelection.push(value); + }); + }); + }; + $scope.country = {}; $scope.countries = [ // Taken from https://gist.github.com/unceus/6501985 {name: 'Afghanistan', code: 'AF'}, diff --git a/src/select.js b/src/select.js index 3b81924b1..0a8e5310e 100644 --- a/src/select.js +++ b/src/select.js @@ -658,18 +658,45 @@ //From model --> view ngModel.$formatters.unshift(function (inputValue) { - var data = $select.parserResult.source (scope, { $select : {search:''}}), //Overwrite $search + var data = $select.parserResult.source (scope, { $select : {search:''}}), //Overwrite $search locals = {}, result; if (data){ if ($select.multiple){ - var resultMultiple = []; + var resultMultiple = [], + parseValue, + unshiftResult; var checkFnMultiple = function(list, value){ if (!list || !list.length) return; for (var p = list.length - 1; p >= 0; p--) { + unshiftResult = false; locals[$select.parserResult.itemName] = list[p]; result = $select.parserResult.modelMapper(scope, locals); - if (result == value){ + locals[$select.parserResult.itemName] = value; + parseValue = $select.parserResult.modelMapper(scope, locals); + + if (parseValue) { + if (angular.isObject(result)) { + if (angular.equals(result, parseValue)) { + unshiftResult = true; + } + } else { + if (result == parseValue) { + unshiftResult = true; + } + } + } else { + if (angular.isObject(result)) { + if (angular.equals(result, value)) { + unshiftResult = true; + } + } else { + if (result == value) { + unshiftResult = true; + } + } + } + if (unshiftResult) { resultMultiple.unshift(list[p]); return true; }