有没有办法在指令中设置输入有效性? 输入存在于指令的模板中。
假设我有模板:
<input type="text" ng-model="someObj.val" ng-change="check()">
我的指示就像:
.directive('myDir', function () {
return {
restrict: 'E',
templateUrl: 'trmplate.html',
link: function (scope) {
someObj = {val: '123'};
scope.check = function () {
var result = false;
myInput.$setValidity(result); //this is didn't work, $setValidity not a function
};
}
}
})
我无法用表单包装它,因为它背后的想法是允许用户在用户的表单中包含此输入。
答案 0 :(得分:3)
您需要检索与输入关联的NgModelController实例。然后在此对象上调用$setValidity
,指定验证密钥(必需,minlength,自定义密钥等)。它看起来像这样:
.directive('myDir', function() {
return {
restrict: 'E',
template: '<input type="text" ng-model="someObj.val" ng-change="check()">',
link: function(scope, element) {
var modelController = element.find('input').controller('ngModel');
someObj = {
val: '123'
};
scope.check = function() {
var result = false;
modelController.$setValidity('myrequired', result);
};
}
}
})
这里最重要的部分是如何获得NgModelController。下面的代码行正在处理它:
var modelController = element.find('input').controller('ngModel');
答案 1 :(得分:2)
你不需要使用elem来获取控制器,只需将它作为参数添加到链接函数中,并将require设置为['ngModel']以获得模型ctrl。
require: ['ngModel'],
link: function (scope, elem, attrs, ctrl) {
someObj = {val: '123'};
scope.check = function () {
var result = false;
ctrl.$setValidity(result);
};
}