Javascript 在另一个指令中绑定一个指令的方式是什么?
我正在编写一个指令,用于在输入上建立客户端和服务器端验证。它应该接受一组验证器名称(例如,Javascript 在另一个指令中绑定一个指令的方式是什么?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我正在编写一个指令,用于在输入上建立客户端和服务器端验证。它应该接受一组验证器名称(例如,aa validate=“required,unique”),遍历它们,为所有可能的验证器添加客户端验证指令(例如,required应该添加ngRequired),其余的则发布到服务器端验证API 最后一部分工作正常:我正在查看ngModel属性,并以100ms的超时时间发布到服务器。但是,从my指令的链接函数中设置客户端验证指令不会导致编译和链接它们。换句话说,他们什么也不做。这是我的密码: angula
aa validate=“required,unique”
),遍历它们,为所有可能的验证器添加客户端验证指令(例如,required
应该添加ngRequired
),其余的则发布到服务器端验证API
最后一部分工作正常:我正在查看ngModel
属性,并以100ms的超时时间发布到服务器。但是,从my指令的链接函数中设置客户端验证指令不会导致编译和链接它们。换句话说,他们什么也不做。这是我的密码:
angular.module('form', [])
.directive('aaValidate', ['$http', function($http) {
return {
priority: 1,
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ctrl) {
var validate = attrs.aaValidate,
validators = validate.split(',');
// This is the problem!
//
// Populate possible client-side validators
for (var i = 0, len = validators.length; i < len; i++) {
var validator = validators[i];
switch (validator) {
case 'required':
attrs.$set('ngRequired', 'true'); break;
// ... and so on for ngPattern, etc.
default: break;
}
}
scope.$watch(attrs.ngModel, function(value) {
// This part works!
//
// Clear existing timeout, reset it with an
// $http.post to my validation API, the result is
// passed into ctrl.$setValidity
});
}
}
}]);
angular.module('form',[])
.directive('aaValidate',['$http',function($http){
返回{
优先事项:1,
限制:“A”,
要求:'ngModel',
链接:函数(范围、元素、属性、ctrl){
var validate=attrs.aaValidate,
validators=validate.split(',');
//这就是问题所在!
//
//填充可能的客户端验证程序
for(var i=0,len=validators.length;i
我确实尝试过注入$compile
,并在链接函数的末尾重新编译元素。我最终得到了无限递归,可能是因为我没有删除一些属性,但即使我这样做,感觉还是很难看。正确的方法是什么
非常感谢您的帮助。提前谢谢
EDIT:jsFiddle:我的第一个答案是错误的-我认为没有办法使用
$compile
服务。下面是如何在不获得无限递归的情况下实现它。我基本上将该指令分为两个指令——一个是添加验证指令,删除自身并重新编译。另一个做其他的事情:
angular.module('form',[])
.directive('aaValidate',['$http','$compile',函数($http,$compile){
返回{
链接:函数(范围、元素、属性){
var validate=attrs.aaValidate,
validators=validate.split(',');
//填充可能的前端验证器
for(var i=0,len=validators.length;i
必须重新编译链接元素,才能使其在ng repeat中工作。我已经更新了小提琴:Hi@joakimbl,感谢您的快速回复。不幸的是,这仍然不起作用。我在
ngRequired
链接函数中放置了一个console.log
,发现它从未被调用。我尝试过将问题代码放入预编译、预链接和后链接阶段,但没有成功。好的,你认为你能提供一个plunker/jsfiddle吗?用一个jsfiddle链接编辑问题。如您所见,删除输入中的文本不会导致myForm.value.$valid
变为false
我认为您必须使用$compile-我已经做了一个更新,向您展示了如何避免无限递归