2014-12-02 4 views
0

Я пытаюсь создать директиву server-validate, которая асинхронно проверяет ввод формы, отправляя частичную форму на наш серверный сервер и анализируя ответ. Я надеялся использовать его как это:Как указать угловую директиву в ссылке другого?

<input type="text" ng-model="stuff" server-validate /> 

(я комбинируя его с другой директивы на оберточной <form>, что указывает, что URL использовать и т.д ...) Для того, чтобы форма не подавать запросы проверки при загрузке страницы мне нужно установить ng-model-options="{ updateOn: 'blur' }", but I'd like to *not* have to do this on every element in the form. Instead, I'd like the server-validate`, чтобы указать это поведение.

Я пробовал пару вещей в функции link, например attrs['ngModelOptions'] = '{updateOn: "blur"}' и attrs['ngModelOptions'] = { updateOn: 'blur' }, но ни один из них не имел никакого эффекта.

Есть ли способ применить это через мою собственную директиву, не указывая ничего другого?

ответ

0

Они имеют отличный пример того, что вы хотите более в документации:

directive('contenteditable', ['$sce', function($sce) { 
    return { 
    restrict: 'A', // only activate on element attribute 
    require: '?ngModel', // get a hold of NgModelController 
    link: function(scope, element, attrs, ngModel) { 
     if (!ngModel) return; // do nothing if no ng-model 

     // Specify how UI should be updated 
     ngModel.$render = function() { 
     element.html($sce.getTrustedHtml(ngModel.$viewValue || '')); 
     }; 

     // Listen for change events to enable binding 
     element.on('blur keyup change', function() { 
     scope.$evalAsync(read); 
     }); 
     read(); // initialize 

     // Write data to the model 
     function read() { 
     var html = element.html(); 
     // When we clear the content editable the browser leaves a <br> behind 
     // If strip-br attribute is provided then we strip this out 
     if (attrs.stripBr && html == '<br>') { 
      html = ''; 
     } 
     ngModel.$setViewValue(html); 
     } 
    } 
    }; 
}]); 

Так что единственное, что похоже, что бы вы изменили бы, чтобы удалить KeyUp и изменить событие из element.on , Затем в вашем размытии вы также выполните запрос сервера. Документы на ngModelController: https://docs.angularjs.org/api/ng/type/ngModel.NgModelController

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