我想在其他自定義指令內動態添加自定義驗證指令。它適用於像「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', ... }' 或者你的意思是別的嗎? –