Angular Material md-select验证问题

时间:2016-03-15 16:06:41

标签: angularjs validation angular-material

我的表单上有几个md-select下拉列表,其中很多都有验证。验证在所有下拉列表中都能正常工作,但以下情况除外:如果没有,则不会阻止表单提交:

    <md-input-container class="form-input-container"
                        flex="15">
      <label>NDRA*</label>
      <md-select id="registration-information-ndra"
                 name="ndra"
                 ng-model="vm.registration.code"
                 ng-class="{'validation-error': newForm.ndra.$error.required && newForm.$submitted}"
                 ng-required="vm.validation.ndra">
        <md-option ng-repeat="code in vm.dropdowns.codes"
                   value="{{code}}">
          {{code}}
        </md-option>
      </md-select>
    </md-input-container>

vm.validation.ndra评估为true,所以我知道这不是问题。如果我查看newForm.ndra与工作选择选项的值,例如newForm.submissionDate,我会得到以下结果:

newForm.ndra: {"$viewValue":"p","$modelValue":"p","$validators":{},"$asyncValidators":{},"$parsers":[],"$formatters":[],"$viewChangeListeners":[],"$untouched":true,"$touched":false,"$pristine":true,"$dirty":false,"$valid":true,"$invalid":false,"$error":{},"$name":"ndra","$options":null}

注册类型(验证工作):

 <md-input-container class="form-input-container padded-input md-block"
                            flex-gt-sm="">
          <label>Type of Registration*</label>
          <md-select id="registration-information-type"
                     name="registrationType"
                     ng-model="vm.registration.type"
                     ng-class="{'validation-error': newForm.registrationType.$error.required && newForm.$submitted}"
                     ng-required="vm.validation.registrationType">
            <md-option ng-repeat="type in vm.dropdowns.types"
                       value="{{type}}">
              {{type}}
            </md-option>
          </md-select>
        </md-input-container>

{"$validators":{},"$asyncValidators":{},"$parsers":[],"$formatters":[],"$viewChangeListeners":[],"$untouched":true,"$touched":false,"$pristine":true,"$dirty":false,"$valid":false,"$invalid":true,"$error":{"required":true},"$name":"registrationType","$options":null}

3 个答案:

答案 0 :(得分:2)

想出来。在我的控制器代码深处,控制器正在实例化,然后this.registration.code被设置为P,因此ndra下拉列表的模型已经有了一个值。

答案 1 :(得分:1)

我在想你的vm.validation.ndra正在回归你的vm.validation.registrationType。所以不需要选择。

如果你看一下返回的内容......

<强>国家药品管理机构

"$valid":true,"$invalid":false

VS

注册类型

"$valid":false,"$invalid":true
他们完全相反。

你应该检查以确保你在vm.validation.ndra

中获得正确的真实性

答案 2 :(得分:0)

只需将值更改为false中的ng-required,然后在以下链接中查看以下结果。我认为vm.validation.ndra会返回falsehttp://codepen.io/next1/pen/WwoyWG