From 9e408d9a8a5dbea436a13f925057383d45692495 Mon Sep 17 00:00:00 2001 From: James Pike Date: Fri, 12 Aug 2016 14:33:44 +0100 Subject: [PATCH] support ng-required validator --- src/uiSelectDirective.js | 7 ++++++- src/uiSelectSingleDirective.js | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) 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;