繁体   English   中英

如何检查转录表格在指令中的有效性?

[英]How can I check transcluded form's validity in directive?

重写此问题以澄清

如何检查转录表格在指令中的有效性? 我想检查myForm.$valid在指令的link functionmyForm.$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
  • 加载过程包括Angular正在编译模板。 此模板包含根级别的指令,因此也需要编译该指令。
  • 该指令使用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,它似乎工作正常。 请记住,只有当表单的有效状态从有效状态变为无效状态或反之时,它才会生成日志。

https://plnkr.co/edit/lW3e4p

  <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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM