一个元素上的多个指令不起作用
Multiple Directives on an Element NOT WORKING
我有一个输入元素,其中有两个指令(属性)。如果输入无效,它会添加一个错误类。
<input required alpha type="text" name="firstName" ng-model="newUser.firstName" class="form-control" maxlength="30" placeholder="First Name" />
这些是我的指令
// SHOWS AN ERROR IF THE INPUT IS EMPTY
directives.required = function() {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
elem.on('keyup', function(event) {
if(elem.val().trim() == '') {
elem.prop('title', 'This input is required!');
elem.addClass('error');
} else {
elem.prop('title', '');
elem.removeClass('error');
}
})
}
}
};
// SHOWS AN ERROR IF THE INPUT CONTAINS NON ALPHA CHARACTERS
directives.alpha = function() {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
var regexp = /^[A-Za-z ñÑ]+$/;
var char;
elem.on('keyup', function(event) {
if(!regexp.test(elem.val())) {
elem.prop('title', 'This input can contain letters only!');
elem.addClass('error');
} else {
elem.prop('title', '');
elem.removeClass('error');
}
})
}
}
};
但它并没有达到我的预期。只有一个指令有效!当我尝试删除属性alpha时,必需现在可以工作了!有人能告诉我为什么它会这样工作吗?
它们不能一起工作,因为它们会覆盖彼此的更改。我添加了额外的条件来避免这种情况:
<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.js"></script>
</head>
<body ng-app="plunker">
<div ng-controller="MainCtrl">
<input required="" alpha="" type="text" name="firstName" ng-model="newUser.firstName" class="form-control" maxlength="30" placeholder="First Name" />
</div>
<script>
var app = angular.module('plunker', []);
app.controller('MainCtrl', ['$scope', function($scope) {
}]).directive('required', function() {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
elem.on('keyup', function(event) {
var title = 'This input is required!';
if(elem.val().trim() == '') {
elem.prop('title', 'This input is required!');
elem.addClass('error');
} else if (elem.prop('title') == title) {
elem.prop('title', '');
elem.removeClass('error');
}
})
}
}
}).directive('alpha', function() {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
var regexp = /^[A-Za-z]*$/;
var char;
elem.on('keyup', function(event) {
var title = 'This input can contain letters only!';
if(!regexp.test(elem.val())) {
elem.prop('title', title);
elem.addClass('error');
} else if (elem.prop('title') == title) {
elem.prop('title', '');
elem.removeClass('error');
}
})
}
}
});
</script>
</body>
</html>
您想要的可以通过内置指令和控制器功能实现:
<!-- HTML -->
<input type="text" name="firstName" placeholder="First name" ng-model="someProp"
ng-pattern="/^[A-Za-z ñÑ]*$/" ng-required="true"
title="{{form1.firstName.$error.pattern?'Should only contain letters':
form1.firstName.$error.required?'This field is required':''}}" />
/* CSS */
input.ng-invalid-pattern,
input.ng-invalid-required {
/* Put the styles for your .error class here */
}
另请参阅简短演示。
相关文章:
- 新的自定义角度指令不起作用
- AngularJS,自定义指令不起作用@ plnkr
- AngularJS + Coffeescript - 'Hello World' 指令不起作用
- 使用 $provide 重命名第三方角度指令 - 不起作用
- 带有指令不起作用的 AngularJS 动态表单字段 ID
- AngularJS:双向数据绑定 - 带有ng重复的指令 - 不起作用
- 为什么我在 AngularJs 中的指令不起作用
- 剑道指令不起作用
- ng-单击指令不起作用
- 为什么这个 angularjs 指令不起作用
- 角度引导添加新指令不起作用
- AngularJS + Facebook喜欢指令不起作用
- 带有 ngModel 绑定的 AngularJS 自定义指令不起作用
- Angularjs 指令不起作用“意外令牌”
- jQuery插件中的Angular指令不起作用
- 可重复使用的按钮指令不起作用
- Angular JS自定义指令不起作用
- 带有编译函数和ng-show的角度对话框指令不起作用
- 一个元素上的多个指令不起作用
- AngularJS:drag-n-drop指令不起作用