From 68a2e4a54aaadb679b6872963d788c58af9fd007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Tata=C5=82a?= Date: Sat, 14 Feb 2015 20:15:22 +0100 Subject: [PATCH 1/4] removing unnecessary line causing track by not working properly joaoneto/angular-bootstrap-select#31 --- src/angular-bootstrap-select.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/angular-bootstrap-select.js b/src/angular-bootstrap-select.js index 67d80aa..d34725d 100644 --- a/src/angular-bootstrap-select.js +++ b/src/angular-bootstrap-select.js @@ -181,7 +181,6 @@ function selectpickerDirective($parse, $timeout) { link: function (scope, element, attrs) { function refresh(newVal) { scope.$applyAsync(function () { - if (attrs.ngOptions && /track by/.test(attrs.ngOptions)) element.val(newVal); element.selectpicker('refresh'); }); } From e27127022b245aeff5d2906d11f8b81158588303 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Tata=C5=82a?= Date: Sat, 14 Feb 2015 20:41:53 +0100 Subject: [PATCH 2/4] track by not working with (... as ... track by) joaoneto/angular-bootstrap-select#31 --- src/angular-bootstrap-select.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/angular-bootstrap-select.js b/src/angular-bootstrap-select.js index d34725d..68c2789 100644 --- a/src/angular-bootstrap-select.js +++ b/src/angular-bootstrap-select.js @@ -181,6 +181,7 @@ function selectpickerDirective($parse, $timeout) { link: function (scope, element, attrs) { function refresh(newVal) { scope.$applyAsync(function () { + if (attrs.ngOptions && / as .* track by/.test(attrs.ngOptions)) element.val(newVal); element.selectpicker('refresh'); }); } From cc570309341d7f4f24417058f517549693d8545f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Tata=C5=82a?= Date: Sat, 14 Feb 2015 22:30:39 +0100 Subject: [PATCH 3/4] watching for changes in options --- src/angular-bootstrap-select.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/angular-bootstrap-select.js b/src/angular-bootstrap-select.js index 68c2789..03721b6 100644 --- a/src/angular-bootstrap-select.js +++ b/src/angular-bootstrap-select.js @@ -175,13 +175,15 @@ angular.module('angular-bootstrap-select', []) */ function selectpickerDirective($parse, $timeout) { + var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/; + return { restrict: 'A', priority: 1000, link: function (scope, element, attrs) { - function refresh(newVal) { + function refresh() { scope.$applyAsync(function () { - if (attrs.ngOptions && / as .* track by/.test(attrs.ngOptions)) element.val(newVal); + if (attrs.ngOptions && / as .* track by/.test(attrs.ngOptions)) element.val(scope.ngModel); element.selectpicker('refresh'); }); } @@ -213,6 +215,9 @@ function selectpickerDirective($parse, $timeout) { element.selectpicker('destroy'); }); }); + + var match = attrs.ngOptions.match(NG_OPTIONS_REGEXP); + scope.$watch(match[7], refresh); } }; } From 41e0102f6e2a0077f5c66fba2d8e6702d8cc31b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Tata=C5=82a?= Date: Sat, 14 Feb 2015 23:15:54 +0100 Subject: [PATCH 4/4] fix ngOptions undefiend in watching options --- src/angular-bootstrap-select.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/angular-bootstrap-select.js b/src/angular-bootstrap-select.js index 03721b6..c4b114e 100644 --- a/src/angular-bootstrap-select.js +++ b/src/angular-bootstrap-select.js @@ -216,8 +216,10 @@ function selectpickerDirective($parse, $timeout) { }); }); - var match = attrs.ngOptions.match(NG_OPTIONS_REGEXP); - scope.$watch(match[7], refresh); + if (attrs.ngOptions) { + var match = attrs.ngOptions.match(NG_OPTIONS_REGEXP); + scope.$watch(match[7], refresh); + } } }; }