角度表单验证,名称在方括号中

时间:2015-11-13 15:36:32

标签: angularjs validation

由于某些原因,当名称中有[]时,我无法获取表单元素。例如,当我尝试以下

    <input class="form-control col-md-1" type="text" name="first_name" id="user_signup_last_name" placeholder="First name" ng-model="user.first_name" required >
    <span style="color:red" ng-show="myForm.last.$dirty && myForm.first_name.$invalid">
    <span class="col-md-1" ng-show="myForm.first_name.$error.required">First name required.</span>

但是当我尝试更改名称以使[]验证停止工作时。

    <input class="form-control col-md-1" type="text" name="user[first_name]" id="first_name" placeholder="First name" ng-model="user.first_name" required>
  <span style="color:red" ng-show="myForm.user[first_name].$dirty && myForm.user[first_name].$invalid">
  <span class="col-md-1" ng-show="myForm.user[first_name].$error.required">First name required.</span>
  1. 我们如何使用[]获取角度以对name属性进行验证?
  2. 有没有办法可以使用id而不是name来检查验证?

2 个答案:

答案 0 :(得分:0)

您可以{{formName['user[first_name]'].$error}}

访问该媒体资源

答案 1 :(得分:0)

今天遇到了这个问题以及&#34;逃避解决方案&#34;没有为我工作。

从本质上讲,rails的表单提交与[]一起使用,但ng-messages指令并不适合这一点。

我创建了一个指令,该指令使用伪名称属性来处理表单内容,为rails嵌套属性语法保留name属性(在CoffeeScript中)

angular.module 'myModule'
  .directive 'fieldName', ->
    directive =
      restrict: 'A'
      require: ['ngModel', '^form']
      scope:
        fieldName: '@fieldName'
      link: (scope, elem, attrs, controllers) ->
        modelCtrl = controllers[0]
        formCtrl = controllers[1]

        formCtrl[scope.fieldName] = modelCtrl
        return

要使用此指令,我使用以下(以haml为单位)

%label My label
%input(ng-model='user_account.email' name='user_account[email]' required field-name='email' required type='email')
%div(ng-messages='form.email.$error')
    %span(ng-message='required') Required