验证添加了指令的表单

时间:2014-02-06 15:34:09

标签: angularjs validation angularjs-directive angularjs-scope

我想访问AngularJS为表单提供的验证变量的内容。 我需要使用代码中的指令添加表单,但是如果我这样做,我就无法再访问$ dirty,$ error,$ invalid变量了,我需要访问它们。

JS:

myApp.directive('test', function() {
  return {
    scope : {
      nameform: "=",
      nameinput: "=",
      type: "="
    },
    template: '<form name=nameform></form>',
    restrict: 'E',
    compile: function (elem,attr){
      var form = elem.find("form");
      if(attr.type == "text")
        form.html('<input type="text" name="nameinput" ng-model="data.text" placeholder="type here..." required />');

    }
  };
});

HTML:

<test nameform="valform" nameinput="valinput" type="text"/>
{{valform.valinput.$invalid}}

3 个答案:

答案 0 :(得分:1)

我认为你做不到。因为您使用隔离范围来构建指令,所以您无法访问该信息。您可以尝试使用共享范围构建指令,我认为您将能够访问此信息。

答案 1 :(得分:0)

将您的指令更改为ng-form而不是form(因为ng-form是可嵌套的)。然后将您的指令包装在另一个表单元素中,并为该新表单元素指定名称。外部表单元素将绑定到外部作用域,您可以通过这种方式访问​​属性。

指令模板:

"<ng-form name="valform"></ng-form>"

HTML:

  <body ng-view>
    <div>Valid: {{outerform.$valid}}</div>
    <div>Errors: {{outerform.$error}}</div>
    <form id="outerform" name="outerform">
    <test type="text"/>
    </form>
  </body>

旁注,表单名称与动态名称不兼容。下面的plunkr使用静态名称,所以我可以帮助您解决当前的问题。我在不同的SO帖子上找到了动态名称问题的解决方案...我认为这个... Dynamic validation and name in a form with AngularJS

这是一个与你的工作形式的plnkr ... http://plnkr.co/edit/RFrRXp2kWkP1Mefwl3Kn?p=preview

答案 2 :(得分:0)

为输入控件构建HTML时,请确保根据作为属性传入的“nameinput”正确附加name属性:

myApp.directive('test', function() {
   return {
      scope : {
         nameform: "=",
         nameinput: "=",
         type: "="
      },
      template: '<form name=nameform></form>',
      restrict: 'E',
      compile: function (elem,attr){
           var form = elem.find("form");
           if(attr.type == "text")
                form.html('<input type="text" name="' + attr.nameinput +'" ng-model="data.text" placeholder="type here..." required />');

      }
   };
});