Обновленная версия Angular вызывает ошибку в ngMessages

Я обновил версию AngularJs с 1.3 до 1.4. Это вызывает ошибку, как,

Синтаксическая ошибка: токен '{' неверный ключ в столбце 2 выражения
[{{frmname}}.emailAddress.$error], начиная с [{frmname}}.emailAddress.$error].

Он отлично работает в Angular 1.3.

<form name="{{frmname}}">
  <h1>My form name = {{frmname}}</h1>
  <div class="field">
  <label for="emailAddress">Enter your email address:</label>
  <input type="email" name="emailAddress" ng-model="email" required />
    <div ng-messages="{{frmname}}.emailAddress.$error">
      <div ng-message="required">
        You forgot to enter your email address...
      </div>
      <div ng-message="email">
        You did not enter your email address correctly...
      </div>
    </div>
  </div>
  <input type="submit" />
</form>

FIDDLE


person Jeff Johny    schedule 17.05.2016    source источник
comment
Какую именно версию вы использовали раньше и используете сейчас?   -  person thepio    schedule 17.05.2016
comment
Он отлично работает в версии 1.3.15.   -  person Jeff Johny    schedule 17.05.2016


Ответы (2)


Если вам нужно установить имя формы из динамической переменной, вы можете использовать ng-form для проверки ваших входных данных внутри фактической формы.

Базовый html:

<form name="{{formName}}" novalidate>

  <ng-form name="emailError">
    <div ng-messages="emailError.emailAddress.$error" style="color:maroon" role="alert">
      <label for="emailAddress">Enter your email address:</label>
      <input type="email" name="emailAddress" ng-model="email" minlength="5" required />
      <div ng-messages="emailError.emailAddress.$error" style="color:maroon" role="alert">
      <div ng-message="required">You did not enter a field</div>
    </div>
  </ng-form>

  <input type="submit" />

</form>

Планкер: https://plnkr.co/edit/Q0ifmRXKkLfwKGNqv8p4?p=preview

Официальная документация ngForm: https://docs.angularjs.org/api/ng/directive/ngForm

person thepio    schedule 17.05.2016

Наконец я получил решение,

Добавьте функцию для получения значения атрибута ng-messages.

<div ng-messages="getMessages('emailAddress')">
  <div ng-message="required">
    You forgot to enter your email address...
  </div>
  <div ng-message="email">
    You did not enter your email address correctly...
  </div>
</div>

Объявите функцию внутри вашего контроллера или директивы.

$scope.getMessages = function (el) {
  return $scope.$eval($scope.frmname)[el].$error;
}

СКРИПКА

person Jeff Johny    schedule 17.05.2016
comment
Объясните, почему ответ отрицательный. - person Jeff Johny; 09.06.2016