Skip to content
This repository was archived by the owner on Dec 16, 2019. It is now read-only.

Commit feef54f

Browse files
committed
Fixed model bug when using single selection
1 parent 5087990 commit feef54f

File tree

5 files changed

+24
-16
lines changed

5 files changed

+24
-16
lines changed

bower.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "angularjs-dropdown-multiselect",
3-
"version": "1.3.3",
3+
"version": "1.3.4",
44
"authors": [
55
"Dotan Simha <[email protected]>"
66
],

dist/angularjs-dropdown-multiselect.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pages/javascripts/pages/home/ExampleCtrl.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ angular.module('exampleApp').controller('ExampleCtrl', ['$scope', function($scop
7373

7474
$scope.example10settings = {selectionLimit: 2};
7575

76-
$scope.example12model = [];
76+
$scope.example12model = {};
7777
$scope.example12data = [
7878
{id: 1, label: "David"},
7979
{id: 2, label: "Jhon"},

pages/javascripts/pages/home/home.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ <h3>Code</h3>
210210
extra-settings="example10settings"></div>
211211

212212
// JavaScript
213-
$scope.example12model = [];
213+
$scope.example12model = {}; // ! IMPORTANT !
214214
$scope.example12data = [
215215
{id: 1, label: "David"},
216216
{id: 2, label: "Jhon"},

src/angularjs-dropdown-multiselect.js

+20-12
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,6 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
108108

109109
$scope.singleSelection = $scope.settings.selectionLimit === 1;
110110

111-
if ($scope.singleSelection)
112-
{
113-
if (angular.isArray($scope.selectedModel) && $scope.selectedModel.length === 0)
114-
{
115-
$scope.selectedModel = null;
116-
}
117-
}
118111

119112
function getFindObj(id)
120113
{
@@ -131,6 +124,21 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
131124
return findObj;
132125
}
133126

127+
function clearObject(object)
128+
{
129+
for (var prop in object) {
130+
delete object[prop];
131+
}
132+
}
133+
134+
if ($scope.singleSelection)
135+
{
136+
if (angular.isArray($scope.selectedModel) && $scope.selectedModel.length === 0)
137+
{
138+
clearObject($scope.selectedModel);
139+
}
140+
}
141+
134142
if ($scope.settings.closeOnBlur) {
135143
$document.on('click', function (e) {
136144
var target = e.target.parentElement;
@@ -169,7 +177,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
169177

170178
if ($scope.singleSelection)
171179
{
172-
totalSelected = $scope.selectedModel !== null ? 1 : 0;
180+
totalSelected = ($scope.selectedModel !== null && angular.isDefined($scope.selectedModel[$scope.settings.idProp])) ? 1 : 0;
173181
}
174182
else
175183
{
@@ -218,12 +226,11 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
218226
}
219227

220228
if ($scope.singleSelection) {
221-
$scope.selectedModel = null;
229+
clearObject($scope.selectedModel);
222230
}
223231
else {
224232
$scope.selectedModel.splice(0, $scope.selectedModel.length);
225233
}
226-
227234
};
228235

229236
$scope.setSelectedItem = function(id, dontRemove){
@@ -239,7 +246,8 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
239246

240247
if ($scope.singleSelection)
241248
{
242-
$scope.selectedModel = finalObj;
249+
clearObject($scope.selectedModel);
250+
angular.extend($scope.selectedModel, finalObj);
243251
$scope.externalEvents.onItemSelect(finalObj);
244252

245253
return;
@@ -261,7 +269,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
261269
$scope.isChecked = function (id) {
262270
if ($scope.singleSelection)
263271
{
264-
return $scope.selectedModel !== null && $scope.selectedModel[$scope.settings.idProp] === getFindObj(id)[$scope.settings.idProp];
272+
return $scope.selectedModel !== null && angular.isDefined($scope.selectedModel[$scope.settings.idProp]) && $scope.selectedModel[$scope.settings.idProp] === getFindObj(id)[$scope.settings.idProp];
265273
}
266274

267275
return _.findIndex($scope.selectedModel, getFindObj(id)) !== -1;

0 commit comments

Comments
 (0)