diff --git a/src/uiSelectDirective.js b/src/uiSelectDirective.js
index cded3d463..2d3ad81b9 100644
--- a/src/uiSelectDirective.js
+++ b/src/uiSelectDirective.js
@@ -98,6 +98,11 @@ uis.directive('uiSelect',
$select.disabled = attrs.disabled !== undefined ? attrs.disabled : false;
});
+ attrs.$observe('required', function() {
+ // No need to use $eval() (thanks to ng-required) since we already get a boolean instead of a string
+ $select.required = attrs.required !== undefined ? attrs.required : false;
+ });
+
attrs.$observe('resetSearchInput', function() {
// $eval() is needed otherwise we get a string instead of a boolean
var resetSearchInput = scope.$eval(attrs.resetSearchInput);
@@ -361,7 +366,7 @@ uis.directive('uiSelect',
};
var opened = false;
-
+
scope.calculateDropdownPos = function() {
if ($select.open) {
dropdown = angular.element(element).querySelectorAll('.ui-select-dropdown');
diff --git a/src/uiSelectSingleDirective.js b/src/uiSelectSingleDirective.js
index 73abedd23..a75a6bc41 100644
--- a/src/uiSelectSingleDirective.js
+++ b/src/uiSelectSingleDirective.js
@@ -43,10 +43,24 @@ uis.directive('uiSelectSingle', ['$timeout','$compile', function($timeout, $comp
if (ngModel.$viewValue !== newValue) {
ngModel.$setViewValue(newValue);
}
+
+ if ($select.required && ngModel.$viewValue) {
+ $select.required = false;
+ }
+ });
+
+ // If value is set then it cannot be required anymore, has value!
+ scope.$watch('$select.required', function(newValue) {
+ if ((typeof ngModel.$viewValue === 'object') && $select.required) {
+ $select.required = false;
+ }
});
ngModel.$render = function() {
$select.selected = ngModel.$viewValue;
+ if ((typeof ngModel.$viewValue === 'object') && $select.required) {
+ $select.required = false;
+ }
};
scope.$on('uis:select', function (event, item) {
@@ -65,7 +79,7 @@ uis.directive('uiSelectSingle', ['$timeout','$compile', function($timeout, $comp
});
//Idea from: https://github.com/ivaynberg/select2/blob/79b5bf6db918d7560bdd959109b7bcfb47edaf43/select2.js#L1954
- var focusser = angular.element("");
+ var focusser = angular.element("");
$compile(focusser)(scope);
$select.focusser = focusser;