Angular динамически устанавливает ng-сообщения в атрибут имени

Я динамически создаю входные данные и также хочу проверить каждый из них, но не могу правильно установить атрибут ng-messages для свойства имени поля, которое создается динамически.

<input ng-model="sub.name" name="subName{{$index}}" class="form-control" placeholder="name" required maxlength="20" />
         <div class="field-error" ng-messages="form.subName{{$index}}.$error" ng-show="form.Name.$touched" role="alert">
               <div ng-message="required">Name is required.</div>
          </div>

У меня проблема со второй строкой, где я динамически устанавливаю ng-сообщения в ng-сообщения. Как я могу это сделать?


person CSharpBeginner    schedule 16.07.2015    source источник
comment
Да, я получил ошибку, я не могу отправить атрибут ng-messages с синтаксисом {{}}, ошибка: [$parse:syntax] Синтаксическая ошибка: токен '{' является неожиданным токеном в столбце 13 выражения [form.subName{ {index}}.$error], начиная с [{{index}}.$error]   -  person CSharpBeginner    schedule 16.07.2015
comment
это довольно странно, потому что я могу установить это для атрибута имени при вводе, но не могу для ng-сообщений:/   -  person CSharpBeginner    schedule 16.07.2015
comment
этот фрагмент кода находится внутри ng-repeat??   -  person Vanojx1    schedule 16.07.2015
comment
да, это внутри ng-repeat   -  person CSharpBeginner    schedule 16.07.2015
comment
это ваша проблема проверять входные данные, динамически созданные с использованием ng Repeat ng Show angular"> stackoverflow.com/questions/12044277/   -  person Vanojx1    schedule 16.07.2015


Ответы (1)


Доступ к свойствам вашего объекта формы также можно выполнить с помощью квадратных скобок, которые должны решить вашу проблему:

<input ng-model="sub.name" name="subName{{$index}}" class="form-control" placeholder="name" required maxlength="20" />
<div class="field-error" ng-messages="form['subName' + $index].$error" ng-show="form.Name.$touched" role="alert">
    <div ng-message="required">Name is required.</div>
</div>
person Helori    schedule 21.07.2015
comment
Спасибо за это, была такая же проблема, и это сработало для меня. Можете ли вы объяснить, почему существует form[]? - person tchen; 07.08.2015
comment
form — это имя в форме, поэтому ‹form name=form...› вы также можете сделать ‹form name=myForm...›, и директива ng-messages будет выглядеть так: ng-message=myForm['subName'. ..]. Это работает и должно быть принятым ответом - person SomethingOn; 28.09.2015
comment
Этот код работает только для меня, когда я изменил ng-show=form.Name.$touched на ng-show=form['subName' + $index].$touched - person boi_echos; 08.11.2015
comment
Спасибо, эта информация действительно помогла мне, я использовал ng-сообщения, но мое поле ввода имело имя в формате firstpart.secondpart, которое angular не мог понять. Однако использование form['firstpart.secondpart'].$error устранило проблему. Спасибо. - person user3094826; 09.02.2018