我正在尝试构建一个表单以将员工添加到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;
};
}
};
});
有关如何做得更好的任何建议?