>(function (angular) { > "use strict"; > > var services, > $log; > > angular.module("sysMgrApp").directive("smCodeUniqueValidator", ["ServiceLoader", smCodeUniqueValidator]); > > /** > * smCodeUniqueValidator Directive > * @param {} serviceLoader > * @returns {Object} > */ > function smCodeUniqueValidator(serviceLoader) { > services = serviceLoader; > $log = services.Log.getInstance("smCodeUniqueValidator"); > > return { > > require: "ngModel", > > scope: { > primaryKey: "=?", > tableName: "@", > columnToTest: "@", > errorMessage: "=?" > }, > > link: function ($scope, element, attrs, ngModel) { > > ngModel.$asyncValidators.smCodeUnique = function (modelValue, viewValue) { > if (!viewValue) { > return true; > } > > let codeObject = { > id: $scope.primaryKey, tableName: $scope.tableName, > columnToTest: $scope.columnToTest, code: viewValue > }; > return services.Http.put('api/items/checkCodeUniqueness', codeObject).then( > function (response) { > if (!response.data.isValid) { > $scope.errorMessage = response.data.errorMessage; > return services.Deferred.reject(response.data.errorMessage); > } > return true; > } > ); > }; > } > }; > } >})(angular);>
><div class="col-xs-6"> > <div class="controls"> > <label class="control-label" > ng-hide="editRetailTrackingForm.barcode.$dirty && editRetailTrackingForm.barcode.$error"> > @Labels.barcode: > </label> > <div ng-if="editRetailTrackingForm.barcode.$dirty"> > <div ng-messages="editRetailTrackingForm.barcode.$error"> > <div ng-message="maxlength"> > <label class="field-validation-error control-label-error animate-show"> > @String.Format(Messages.cannotExceed, Labels.barcode, "100") > </label> > </div> > <div ng-message="smCodeUnique"> > <label class="field-validation-error control-label-error animate-show"> > {{itemBarcodeErrorMessage}} > </label> > </div> > </div> > </div> > <div ng-class="{loading:editRetailTrackingForm.barcode.$pending}">@String.Format(Messages.validatingX, Labels.barcode)</div> > <input type="text" name="barcode" > ng-model="currentItem.barcode" > sm-code-unique-validator > table-name="items" > column-to-test="barcode" > error-message="itemBarcodeErrorMessage" > primary-key="currentItem.itemId" > ng-model-options="{ debounce: { default : 500, blur: 0 }}" > class="form-control" > ng-maxlength="100" /> > > </div> > </div>Looks like this might be known behaviour. See: https://stackoverflow.com/questions/31736496/why-does-adding-additional-angularjs-validation-directives-cause-asyncvalidator