我想在其他自定义指令内动态添加自定义验证指令。它适用于像“required”这样的系统角度指令,但不适用于自定义验证指令。编译自定义指令
我有指令'controlInput'与输入,我动态地添加指令'testValidation'(在实际应用中从控制输入的数据依赖)。
<control-input control-data='var1'></control-input>
指令:
app.directive('controlInput', function ($compile) {
return {
restrict: 'E',
replace: true,
template: '<div><input type="text" ng-model="var1"></div>',
link: function (scope, elem, attrs) {
var input = elem.find('input');
input.attr('required', true);
input.attr('test-validation', true);
$compile(elem.contents())(scope);
}
};
});
app.directive('testValidation', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
ctrl.$parsers.unshift(function (value) {
if (value) {
var valid = value.match(/^test$/);
ctrl.$setValidity('invalidTest', valid);
}
return valid ? value : undefined;
});
}
};
});
完整的示例http://plnkr.co/edit/FylMfTugHrotEMSQyTfT?p=preview
在这个例子中,我还添加简单的输入,以确保 'testValidation' 指令工作。
感谢您的任何答案!
任务是通过http请求和表单字段的描述来构建表单。字段示例json是{type:'text',value:'[email protected]',名称:'email'}。验证规则,我们可以通过字段“name”来定义 –
我认为你必须要求:'ngModel',因为在文档中它说:定义你自己的验证器可以通过定义你自己的指令来添加一个自定义验证函数到ngModel控制器。 – Lrrr
是的,我做到了: 'app.directive( 'testValidation',函数(){ 回报{ 限制: 'A', 要求: 'ngModel', ... }' 或者你的意思是别的吗? –