2015-12-23 2 views
0

У меня есть форма, которая была перенесена в таблицу, проиграв встроенные функции проверки формы, как я не могу использовать нг подать:Срабатывание угловой формы проверки из обработчика щелчка

<tr ng-form="controller.add.form"> 
    <td>New item</td> 
    <td><input type="text" name="name" id="newName" class="form-control" placeholder="Name" required ng-model="controller.add.name"></td> 
    <td><textarea name="description" id="newDescription" class="form-control" placeholder="Description" ng-model="controller.add.description"></textarea></td> 
    <td><button class="btn btn-xs btn-primary" type="submit" ng-click="controller.add.save()">Save</button></td> 
</tr> 

Это то, что мой контроллер выглядит например:

.controller('ObjectController', ['ObjectService', function(ObjectService) 
{ 
    var objects = this; 
    objects.entries = []; 
    objects.add = { 
    name: '', 
    description: '', 
    save: function() 
    { 
     if(!objects.add.form.$valid) return; 
     ObjectService.create(
     {name: objects.add.name, description: objects.add.description}, 
     function(r) 
     { 
      if(r && 'name' in r) 
      { 
      objects.add.name = ''; 
      objects.add.description = ''; 
      objects.entries.push(r); 
      } 
     } 
    ); 
    } 
    }; 
    ObjectService.read({}, function(r) { objects.entries = r; }); 
}]) 

Как я могу сделать валидацию запуска метода сохранения стандартными всплывающими окнами при нажатии?

+0

Вы собираетесь использовать $ http.POST с сохранением отправки? – AndreaM16

+0

Метод сохранения вызывает угловое обслуживание –

+0

@MortenNilsen Не могли бы вы разместить код контроллера? – pratikpawar

ответ

0

От AngularJS API Reference:

цели ngForm является контрольной группой, но не для замены для <form> тега со всеми его возможностей (например, проводки к серверу, .. .).

ngForm позволяет создавать «формы групп» в основной родительской формы, которые позволяют проверять поля внутри группы индивидуально. Таким образом, вы должны окружить ng-форму <form> или даже потерять ng-форму, если вам не нужна проверка по группам.

+0

Я не могу окружить это формой из-за того, что это строка таблицы - форма вообще не работает из-за того, что она недействительна html. –

+0

Возможно, вы можете окружить всю таблицу «

» или использовать CSS, который имитирует макет тега TABLE: 'display: table',' display: table-row' и 'display: table-cell'. Чтобы использовать встроенную проверку и ng-submit, вы используете тег ''. Это известная проблема: https://github.com/angular/angular.js/issues/2513 –

+0

выкладка табличных данных без таблицы кажется мне не стартером. Кроме того, создание единой таблицы одинаково неверно. Думаю, мне просто нужно отказаться от обратной связи для проверки валидации. –

0

Вам нужно будет передать форму в ваш обработчик кликов.

Если предположить, что форма имеет название «Myform», изменение нг нажмите на:

ng-click="controller.add.save($event, myForm)" 

И в контроллере:

save : function(event, form) { 
      if (form.$invalid) { 
       console.log('invalid'); 
      } else { 
       console.log('valid'); 
      } 
     } 

Просто заметил ваш комментарий о не используя элемент формы - как сказал Янив, просто окружать таблицу с элементом формы:

<form name="myForm" novalidate> 
    <table> 
     <tr ng-form> 
      <td>New item</td> 
      <td> 
       <input type="text" name="name" id="newName" class="form-control" placeholder="Name" required ng-model="controller.add.name"> 
      </td> 
      <td> 
       <textarea name="description" id="newDescription" class="form-control" placeholder="Description" ng-model="controller.add.description"></textarea> 
      </td> 
      <td> 
       <button class="btn btn-xs btn-primary" type="submit" ng-click="controller.add.save($event, myForm)">Save</button> 
      </td> 
     </tr> 
    </table> 
</form> 

Демо http://plnkr.co/edit/qKFs3q?p=preview

+0

У меня есть некоторые проблемы с размещением формы вокруг таблицы, так как таблица содержит скрытые элементы ввода, используемые для редактирования строк по требованию. Это мое первое угловое приложение, хотя мои опасения могут быть потеряны, если я этого не знаю. –

+0

Не видя всего своего приложения, я не думаю, что при этом возникнут какие-либо проблемы.В качестве альтернативы вы можете попробовать передать каждый из входов на вашу функцию сохранения (например, controller.add.save ($ event, name, description) и проверить угловые свойства для каждого элемента, такого как имя. $ Invalid. что раньше от контроллера, но подозревал, что он должен работать. – Chris

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