即使要求的字段为空,myForm。$ valid仍返回true

时间:2018-12-06 13:09:08

标签: javascript angularjs angularjs-directive ng-required

我有一个myForm表单,其中包含一些输入字段。

我要实现的目标:只有其他输入字段中的至少一个不为空时,每个字段才是required

我该怎么做:我在每个字段上设置了ng-required="ctrl.isAtLeasOneFieldSet()"。此功能检查是否设置了任何字段。 直到这里工作。如果我设置了一个字段,则返回true,如果未设置任何字段,则返回false。我也在Firefox的“ developer-console-inspector”中看到了这一点,当我在一个输入字段中设置和取消设置值时,需要在true和false之间进行更改。

什么不起作用:我在控制器中拥有了一个Submit函数:

function submitForm(valid) {
   if(!valid) {
      return;
   }
}

并以ng-submit="ctrl.submitForm(ctrl.myForm.$valid)"格式。 即使ng-required设置为true且未设置输入字段,valid中的submitForm也会返回true。 我已经在ng-required="someValue"上使用了这种技术数千次,但是没有像现在这样使用过功能,并且效果很好。我认为将ng-required设置为ctrl.isAtLeasOneFieldSet()时出现问题。看来该表单无法获取对required的更新。

这里有一个模拟:

  

index.html-表单

<form name="ctrl.myForm" class="form-horizontal" role="form" data-ng-submit="ctrl.submitForm(ctrl.myForm.$valid)" novalidate>
        <input name="name"
            data-ng-model="data.name"
            data-ng-required="{{ctrl.isAtLeasOneFieldSet()}}"
        />
        <input name="surname"
            data-ng-model="data.surname"
            data-ng-required="{{ctrl.isAtLeasOneFieldSet()}}"
        />
        <!---->
</form>
  

index.js-SubmitForm()

function submitForm(valid) {
    if(!valid) {
        return;
    }

    // Do something else
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,我发现了问题。虽然我不确定有什么区别。

右:data-ng-required="ctrl.isAtLeasOneFieldSet()"

错误:data-ng-required="{{ctrl.isAtLeasOneFieldSet()}}"

如果有人知道为什么会这样以及在每种情况下究竟会发生什么,请在此处写下答案。