diff --git a/angularjs/angular-tests.ts b/angularjs/angular-tests.ts old mode 100644 new mode 100755 index 7511f3627..975059999 --- a/angularjs/angular-tests.ts +++ b/angularjs/angular-tests.ts @@ -702,4 +702,30 @@ module locationTests { $location.path() == '/foo/bar' $location.url() == '/foo/bar?x=y' $location.absUrl() == 'http://example.com/#!/foo/bar?x=y' -} \ No newline at end of file +} + +// NgModelController +function NgModelControllerTyping() { + var ngModel: angular.INgModelController; + var $http: angular.IHttpService; + var $q: angular.IQService; + + // See https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#$validators + ngModel.$validators['validCharacters'] = function(modelValue, viewValue) { + var value = modelValue || viewValue; + return /[0-9]+/.test(value) && + /[a-z]+/.test(value) && + /[A-Z]+/.test(value) && + /\W+/.test(value); + }; + + ngModel.$asyncValidators['uniqueUsername'] = function(modelValue, viewValue) { + var value = modelValue || viewValue; + return $http.get('/api/users/' + value). + then(function resolved() { + return $q.reject('exists'); + }, function rejected() { + return true; + }); + }; +} diff --git a/angularjs/angular.d.ts b/angularjs/angular.d.ts index 0e54c2aea..eb826fa48 100755 --- a/angularjs/angular.d.ts +++ b/angularjs/angular.d.ts @@ -524,11 +524,11 @@ declare module angular { } interface IModelValidators { - [index: string]: (...args: any[]) => boolean; + [index: string]: (modelValue: any, viewValue: string) => boolean; } interface IAsyncModelValidators { - [index: string]: (...args: any[]) => IPromise; + [index: string]: (modelValue: any, viewValue: string) => IPromise; } interface IModelParser {