2015-11-13 55 views
1

由于某种原因,我无法在名称中包含[]的情况下获取表单元素。例如当我尝试以下内容时用方括号中的名称进行角度表单验证

<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来检查验证?

回答

0

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

+0

是有关于2# – GiridharBandi

+0

关于对#2 我真的不知道的可能性。但我认为这是因为'id'不能包含像'['或']'这样的字符。 – Dvir

0

访问属性今天碰到这个问题和“逃避解决方案”并没有为我工作。

从本质上说,rails的表单提交可以与[]一起使用,但是ng-messages指令不能很好地与此配合。

我创建了一个使用假名属性来处理的形式的东西离开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