2015-11-13 81 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