- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用指令来检查电子邮件是否已在我的数据库中注册。
app.directive('uniqueEmail', function($http) {
var toId;
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attr, ctrl) {
//when the scope changes, check the email.
scope.$watch(attr.ngModel, function(value) {
// if there was a previous attempt, stop it.
if(toId) clearTimeout(toId);
// start a new attempt with a delay to keep it from
// getting too "chatty".
toId = setTimeout(function(){
// call to some API that returns { isValid: true } or { isValid: false }
$http.get('check/e/' + value).success(function(data) {
//set the validity of the field
ctrl.$setValidity("uniqueEmail", data.isValid);
});
}, 200);
})
}
}
});
<form name="myForm">
<input type="email" ng-model="userEmail" name="userEmail" required unique-email/>
<tt>myForm.userEmail.$error = {{myForm.userEmail.$error}}</tt>
</form>
ctrl.$setValidity("uniqueemail", false) shows true
和 ctrl.$setValidity("uniqueemail", true) shows false
最佳答案
如果您使用 type="email"
,则根本不需要正则表达式. Angular 会关心你的验证。
angular.module('directives.emailUnique', [])
.directive('emailUnique', ['$http', function ($http) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, el, attrs, ctrl) {
ctrl.$parsers.push(function (viewValue) {
if (!viewValue) {
ctrl.$setValidity('emailUnique', true);
return undefined;
}
$http.get('/api/emailunique/' + viewValue).success(function (data) {
if (data.data && data.data.unique)
ctrl.$setValidity('emailUnique', true);
else
ctrl.$setValidity('emailUnique', false);
}).error(function () {
alert('Sorry, a technical issue prevents to validate your email.\n ' +
'Thanks to retry later.');
});
return viewValue;
});
}
};
}]);
describe('emailUnique directive', function () {
var $scope, form, $httpBackend;
beforeEach(function () {
module('directives.emailUnique');
inject(function ($compile, $rootScope, _$httpBackend_) {
$scope = $rootScope;
$httpBackend = _$httpBackend_;
var element = angular.element(
'<form name="form" novalidate><input name="email" type="email" ng-model="model.email" required email-unique/></form>'
);
$scope.model = {
email: ''
};
$compile(element)($scope);
$scope.$digest();
form = $scope.form;
});
});
afterEach(function () {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
describe('email uniqueness', function () {
it('should return the current value if the email is a valid one', function () {
$httpBackend.whenGET('/api/emailunique/michael@gmail.com').respond(200, {data: {unique: true}});
setViewValue('michael@gmail.com');
$httpBackend.flush();
expect($scope.model.email).toBe('michael@gmail.com');
$httpBackend.whenGET('/api/emailunique/david@gmail.com').respond(200, {data: {unique: true}});
setViewValue('david@gmail.com');
$httpBackend.flush();
expect($scope.model.email).toBe('david@gmail.com');
});
it('emailUnique validity should not be evaluated to true if email is invalid', function () {
setViewValue('michael');
expect(form.email.$error.emailUnique).not.toBe(true);
});
it('should set emailUnique validity to true if email is unique', function () {
$httpBackend.whenGET('/api/emailunique/michael@gmail.com').respond(200, {data: {unique: true}});
setViewValue('michael@gmail.com');
$httpBackend.flush();
expect(form.email.$error.emailUnique).toBe(false);
});
it('should not set emailUnique validity to true if email is not unique', function(){
$httpBackend.whenGET('/api/emailunique/david@gmail.com').respond(200, {data: {unique: false}});
setViewValue('david@gmail.com');
$httpBackend.flush();
expect(form.email.$error.emailUnique).toBe(true);
});
it('should call emailUnique server api if email is valid, to check for uniqueness', function(){
$httpBackend.expectGET('/api/emailunique/michael@gmail.com').respond(200, {data: {unique: true}});
setViewValue('michael@gmail.com');
$httpBackend.flush();
});
it('should set emailUnique to true if ' +
'it was first evaluated as not unique and then back to an invalid one', function(){
$httpBackend.whenGET('/api/emailunique/david@gmail.com').respond(200, {data: {unique: false}});
setViewValue('david@gmail.com');
$httpBackend.flush();
setViewValue('michaelgmail.com');
expect(form.email.$error.emailUnique).toBe(false);
});
});
function setViewValue(email) {
form.email.$setViewValue(email);
$scope.$digest();
}
});
关于angularjs $setValidity 在检查电子邮件唯一性时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23011819/
我使用指令来检查电子邮件是否已在我的数据库中注册。 app.directive('uniqueEmail', function($http) { var toId; return {
我正在尝试一个简单的 Angular 日期验证,其中当选择的日期大于当前日期时,todate在提交时给出错误消息。但输出并不如预期。选择任何日期时都会出错,但条件在调试断点中正确检查。 骗子链接“:p
我的 Angular JS 应用程序中有以下代码块。 (这是庞大代码的简化版本) HTML JS文件 app.controller('moveCtrl',
我正在 Angular 中创建一个包含三个输入的注册表单:email、password 和 passwordConfirm。我的 Controller 看起来像这样: app.controller('
我不确定为什么 setValidators 在我的以下代码中不起作用。我不确定问题是什么,因为当我根据需要设置 formControl 时它没有任何效果。我想要实现的是在选择特定选项时动态设置一些所需
我有这个元素: 回调执行: $scope.myForm.azurerepo.$setValidity('azurerepo',false); 如果我输入数据并从输入中出来,它会将其设置为无效。 如果
我有这样的指令: .directive('validRegex', function() { return { restrict: 'A', require: 'n
我正在使用 AngularJs 1.2。我的 $setValidity 有问题。 我有一个带有 ng-repeat 的表单输入: 现在我需要在某些指定输入上使用 $setValidity
我正在尝试使用 $setValidity在指令中的元素上。我发现的所有示例似乎都将它设置在 Controller 上...... 我在表单验证上 fork 了一个 JS fiddle,并尝试了很多东西
我正在尝试构建一个自定义指令(基于我看到的示例)以确保确认密码正确。我在 $setValidity 标签上遇到了一些麻烦,尽管我所有的 console.log() 都执行并打印出来,但有效性似乎没有被
我有一些函数可以动态分配验证 // set validation from sports response. private static setValidation(sportsItem: Sp
我有指令验证用户输入的相同密码。但在指令内部我想为两个输入元素setValidity = true .directive('equalsTo', function() { return
我正在使用设置表单有效性的指令。一切都相应地进行,但是自定义有效性的 bool 值不会立即返回,确切地说,它需要执行额外的按键操作。顺便说一句,我使用“element.blur”来设置自定义有效性。
例如,我有这段代码初始化 word 验证器 minlength 6 个字符。然后当 word 的长度 >4 时,minlength 被设置为 8 个字符。 问题是,当您输入第五个字符时,更改不会立即可
例如,我有这段代码初始化 word 验证器 minlength 6 个字符。然后当 word 的长度 >4 时,minlength 被设置为 8 个字符。 问题是,当您输入第五个字符时,更改不会立即可
我想我遗漏了 $validators 和 $setValidity 的东西(据我所知,做完全相同的事情所以你不需要两者 - 请更正如果我错了,我)。无论我是否有 $validators 语句,我都会将
我正在使用使用指令实现的自定义表单输入验证器。在指令中,验证事件绑定(bind)到输入的模糊事件。因此,在模糊时,它使用 $setValidity 设置模型的有效性。但是,在模型的值再次修改之前,$v
我正在使用 FluentValidation 来验证对象内部的集合,将集合项的元素与父对象的元素进行比较。 目标输出是接收集合中每个失败项的 ValidationFailures,而不仅仅是集合失败。
我正在尝试对文件更改进行一些验证。这是我的代码: View /模板 Error Selected file is too large Unsupported File type Controller
我有一个父组件,我在其中创建一个 FormControl 数组并使用 Validations.required Validator 对其进行初始化。 在子组件中,我根据来自父组件的输入(真/假)添加一
我是一名优秀的程序员,十分优秀!