2015-06-08 3 views
1

У меня есть директива, прикрепленная к полю ввода, которое вызывает $compile(element)(scope); в методе ссылки. Все работает хорошо, за исключением того, когда пытаются использовать следующие:

ng-class="{ 'has-error' : frm.first_name.$invalid && frm.last_name.$dirty }"

$ недействительные обновления свойств, но $ загрязнен (и $ нетронутые) всегда сохраняют свои первоначальные значения.

plnkr example

Я не знаю, как подойти к этой проблеме. У кого-нибудь есть идеи? Любая информация будет принята с благодарностью. Благодаря!

ответ

1

Вы должны использовать компилировать, вместо ссылки, как так:

app.directive('inputDataType', ['$compile', function ($compile) { 
     var compileFn = function(element) { 
      element.removeAttr('input-data-type'); 

      // Add pattern 
      element.attr('ng-pattern', '^[a-zA-Z0-9]+$'); 

      // Make input field required 
      element.attr('required', 'true'); 

      // Compile to attach new directives/pattern/required 
      var fn = $compile(element); 

      return function(scope){ 
       fn(scope); 
      }; 
     }; 

     return { 
      restrict: 'A', 
      scope: false, 
      terminal: true, 
      priority: 1001, 
      compile: compileFn 
     }; 
    }]); 

Посмотрите здесь для получения дополнительной информации: creating a new directive with angularjs

Изменено plunkr: http://plnkr.co/edit/85uHw9pSS3dEy9dGX2lz

+0

Спасибо за взглянуть. К сожалению, теперь свойство $ invalid не обновляется (но $ dirty/$ pristine теперь работает так, как ожидалось). –

+0

Обновлен plunkr и обновлен код в ответ. Забыл, что для элемента компиляции является первым параметром, поэтому код был ошибочным! Кажется, для меня сейчас работает –

+0

Извините, что я болею, у меня есть обновленный [plunker] (http://plnkr.co/edit/3cDNbk7OBxjBtfIktN2V?p=preview), который включает изменения, отмеченные в [подробнее] http://stackoverflow.com/questions/21315312/creating-a-new-directive-with-angularjs/21317635#21317635) ссылку и использовать ng-pattern, но у меня все еще есть проблемы. Могу ли я беспокоить вас за какие-либо советы? –

Смежные вопросы