myForm.$valid returns true 即使所需字段为空

myForm.$valid returns true even though required feld is empty

我有一个带有一些输入字段的表单 myForm

我要实现什么:每个字段 required 仅当至少一个其他输入字段不为空时。

我是怎么做的:我在每个字段上设置 ng-required="ctrl.isAtLeasOneFieldSet()"。此函数检查是否设置了任何字段。 直到这里它起作用。如果我设置一个字段它 returns true 如果没有设置字段它 returns false。我也在 Firefox 的 "developer-console-inspector" 中看到它,当我在其中一个输入字段中设置和取消设置值时,需要在 true 和 false 之间进行更改。

什么不起作用:我在我的控制器中有一个提交功能:

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

并在表格上 ng-submit="ctrl.submitForm(ctrl.myForm.$valid)"。 即使 ng-required 设置为 true 并且未设置输入字段,submitForm returns true 中的 valid 也是如此。 我已经在 ng-required="someValue" 中使用了这种技术数千次,但没有像现在这样使用 functionl,而且效果很好。我认为我设置 ng-requiredctrl.isAtLeasOneFieldSet() 时有问题。看起来表单不会更新到 required.

这里是一个模拟:

index.html - form

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

我在这个案例中发现了问题。虽然我不确定有什么区别。

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

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

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