重写这个问题来澄清
如何在指令中检查转录形式的有效性?
我想检查myForm.$valid在指令的link函数中.我会将不同的表单注入我的指令,或以不同的形式使用我的指令,你可以说
难度是范围是孤立的,没有以下答案对我有用.
请在这里找到完整的代码,
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.>加载过程包括Angular正在编译模板.此模板包含根级别的指令,因此也需要编译指令.>该指令使用截断并加载模板dialog.html.重要的是要注意,您的esDlg指令的范围现在可以在dialog.html的模板中使用,因此您可以访问在指令声明的范围内定义的所有属性.您已经使用对话框的标题和文本.>我们所需要做的就是在这里绑定有效性信息,以便我们可以在对话框中使用它.