用于检查用户名是否已存在的Angular指令

时间:2015-08-13 10:59:54

标签: javascript angularjs rest

我正在尝试构建一个表单以将员工添加到Sharepoint列表中。我需要检查输入的用户名是否已经存在,这是通过REST调用完成的。

但我似乎找不到可行的选择。我目前的解决方案是显示一个警告窗口,让用户知道用户名已经存在。但我宁愿在输入字段下显示错误消息,如果用户名已存在,则锁定输入字段。

HTML(仅限相关部分):

        <div class="form-group">
            <label for="title" class="col-lg-4 control-label">SAM ID</label>
            <div class="col-lg-8">
                <input type="text" class="form-control" ng-model="employeeSamId" name="samId" required username-validator>
                <div ng-if="SamError == true">
                    <p>SAM ID is already in use. Please use a different ID.</p>
                </div>
            </div>
        </div>

角/ JS:

var spApp = angular.module('emsApp',['ui.bootstrap', 'angular-edit-row', 'uiSwitch', 'ui-notification','ngMessages'])
spApp.directive('usernameValidator', function($q, $http ) {
                return {
                    require: 'ngModel',
                    link: function(scope, element, attrs, ngModel) {
                        ngModel.$asyncValidators.username = function(modelValue, viewValue) {
                            if (!viewValue) {
                                return $q.when(true);
                            }
                            var deferred = $q.defer();
                            $http(
                                {
                                    method: "GET",
                                    url: "xxxx/_api/lists/getbytitle('NewEmployee')/items?$filter=Name eq '"+viewValue+"'",
                                    headers: { "Accept": "application/json;odata=verbose"}
                                }
                                ).success(function (data, status, headers, config) {    
                                    if (data.d.results[0].Name == viewValue){
                                        console.log("Already exist");   
                                        deferred.reject();      
                                    }                                               
                                })
                            return deferred.promise;
                        };
                    }
                };
            });

有关如何做得更好的任何建议?

0 个答案:

没有答案