[英]How can I check transcluded form's validity in directive?
重写此问题以澄清
如何检查转录表格在指令中的有效性? 我想检查myForm.$valid
在指令的link function
中myForm.$valid
。 我会在我的指令中注入不同类型的表格,或者以不同的形式使用我的指令
困难在于范围是孤立的,并且没有以下答案对我有效。
请在这里找到完整的代码,
https://plnkr.co/edit/K3IrE5KVehWXFM9JEMvE?p=preview
我希望在表单无效时禁用“保存”按钮。
要回答您的主要问题,您可以像任何其他模型值一样公开和绑定表单:
angular.module("main", []) .directive("formDirective", formDirective); function formDirective() { return { restrict: "A", scope: { formModel: "=formModel" }, link: function (scope, element, attrs) { scope.$watch("formModel.$valid", function (newValue, oldValue) { console.log(newValue, oldValue); }); } } }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="main"> <div form-directive form-model="myForm"> <div> <form name="myForm"> <div> <input type="text" ng-model="name" required="required"> </div> Valid: {{myForm.$valid}} </form> <div> </div> </div>
但是,从我们的聊天对话中可以清楚地看到,您的整体问题更为复杂。
我在这里添加了一个工作示例: https : //plnkr.co/edit/lkfdmc0PLRadfYFVhFAm?p = preview
这里要实现的关键方面是:
$uibModal.open
打开一个模态对话框,它会实例化引用的控制器editCtrl
并加载你的模板editCtrl.html
。 dialog.html
并加载模板dialog.html
。 请务必注意,esDlg指令的范围现在可以在dialog.html
的模板中dialog.html
,因此您可以访问在指令声明scope
定义的所有属性。 angular.module("main", []) .directive("formDirective", formDirective); function formDirective() { return { restrict: "A", scope: { formModel: "=name" }, link: function (scope, element, attrs) { scope.$watch("formModel.$valid", function (newValue, oldValue) { console.log(newValue, oldValue); }); } } }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="main"> <div my-directive> <div> <form name="myForm" form-directive> <div> <input type="text" ng-model="name" required="required"> </div> Valid: {{myForm.$valid}} </form> <div> </div> </div>
我建议你使用angular-auto-validate
你正确定义指令吗? 查看此plunker ,其中validity
的记录如您所期望的那样。
function MyDirective() {
return {
restrict: 'AE',
scope: true,
link: function (scope, element, attrs) {
scope.$watch('myForm.$valid', function (validity) {
console.log(validity);
});
}
}
}
我从你的代码创建了一个plunk,它似乎工作正常。 请记住,只有当表单的有效状态从有效状态变为无效状态或反之时,它才会生成日志。
<div ng-app="my-app">
<div ng-controller="testCtrl">
<div my-directive>
<form name="myForm">
<input type="number" step="0.01" ng-model="rate" required>
</form>
</div>
</div>
</div>
角度:
angular.module('my-app').directive('myDirective', function() {
return {
link: function(scope, element, attr, mCtrl) {
scope.$watch('myForm.$valid', function(validity) {
console.log(validity);
})
}
};
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.