В нескольких формах в моем приложении я пытаюсь использовать ту же директиву, которая является полем ввода электронной почты, заполненным проверкой (оно отправляет его значение из списка недавно использованных писем, но это не относящихся к этому вопросу). Поскольку форма, в которой используется директива, отличается в зависимости от того, где я ее использую, атрибут ng-messages должен быть динамически визуализирован.Динамически заданное имя формы в ng-сообщениях
Мне удалось получить ng-сообщения, чтобы динамически настроить себя, но он работает не так, как ожидалось. Вот код:
form.html
<form name="joinForm">
<rt-recents-menu ng-model="vm.roomName"/>
</form>
directive.coffee
recents = angular.module 'rtRecents', ['ionic', 'ngMessages']
.factory('rtRecentsService', require './recentsService')
.directive('rtRecentsMenu', (rtRecentsService, $ionicActionSheet) ->
restrict: 'E'
template: require './recentsMenu.html'
scope:
ngModel: '=?'
require: ['?ngModel', '^form']
transclude: false
replace: false
link: (scope, element, attrs, ctrls) ->
ngModel = ctrls[0]
formCtrl = ctrls[1]
scope.formName = formCtrl.$name
module.exports = recents.name
directive.html
<div class="email-line">
<input type="email"
name="roomName"
required
ng-model="ngModel"
ng-keydown="onKeyDown()"/>
<div id="email-error-messages" ng-messages="{{formName}}.roomName.$error" multiple role="alert">
<div ng-message="required" class="warn" translate>VALIDATION.EMAIL_REQUIRED_ERROR</div>
<div ng-message="email" class="warn" translate>VALIDATION.EMAIL_INVALID_ERROR</div>
</div>
</div>
Это была боль. googling для этой проблемы дает только людям, использующим одну форму на странице с большим количеством полей ввода, генерируемых ng-repeat. Понадобилось время, чтобы разобраться. Дайте мне знать, как ниже работает для вас, если вам нужно немного подкорректировать, я могу помочь. Счастливые ngCoding! –