Показать сообщение отдельно
  #5 (permalink)  
Старый 11.02.2014, 13:54
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Первый способ больше нравится, т.к. пользователю очевиднее задавать модель в ng-model. Проблема в том, что добавляется еще один ngModelController, который участвует в валидации. Поэтому, на родительском диве также формируются классы ng-pristine и т.п., и сообщение об ошибке валидации может дублироваться.

Решил проблему установкой
terminal: true,
priority: 200

Но не до конца понимаю механизм приоритетов. Правильно ли сделал. Кто-нибудь может объяснить?

.directive('formPassword', function() {
        return {
            restrict: 'AE',
            terminal: true,
            priority: 200,
            templateUrl: 'template.html',
            replace: true,
            scope: {
                model: '=ngModel'
            },
            compile: function(tElem, tAttrs) {
                var input = tElem.find('input')[0];

                for (var k in tAttrs.$attr) {
                    if (tAttrs.$attr.hasOwnProperty(k)) {
                        if (k !== 'formPassword' && k !== 'type') {
                            input.setAttribute(tAttrs.$attr[k], tAttrs[k]);
                        }
                        if (k !== 'ngModel' && k !== 'class') {
                            tElem.removeAttr(tAttrs.$attr[k]);
                            delete tAttrs.$attr[k];
                            delete tAttrs[k];
                        }
                    }
                }

                return function(scope, element, attrs, ctrls) {
                    scope.show = false;
                }
            }
        };
    });
Ответить с цитированием