在 angularJS 中手动提交表单

Submit form manually in angularJS

我有这个angular表格

  <ion-nav-buttons side="right">
    <a class="button button-icon icon ion-android-done" href="#search/search-form" ng-click="submitNewPublishMessage(msgForm.$valid, msgForm)"></a>
  </ion-nav-buttons>
  <ion-content> 
      <form name="msgForm" class="css-form" novalidate>   
        <input type="text" name="title" ng-model="msgForm.title" ng-minlength="10" ng-maxlength="150" required>
        ...
        ...

我想在单击 a 时通过调用 submitNewPublishMessage() 手动提交 form 内部控制器两个 msgForm.$valid, msgForm 都未定义。

$scope.submitNewPublishMessage = function(isValid, form)
{
  alert(isValid);
  alert(JSON.stringify(form));
}

将 ng-click 事件放入表单中

    <form name="msgForm" class="css-form" novalidate>
         <ion-nav-buttons side="right">
        <a class="button button-icon icon ion-android-done" href="#search/search-form" ng-click="submitNewPublishMessage(msgForm.$valid, msgForm)"></a>
      </ion-nav-buttons>
      <ion-content> 

            <input type="text" name="title" ng-model="msgForm.title" ng-minlength="10" ng-maxlength="150" required>
            ...
            ...
</form>

我不知道 ionic,但我的猜测是 ionContent 指令有它自己的范围,因此表单是在这个内部范围而不是控制器的范围内创建的。

一如既往,诀窍是避免将事物直接存储在作用域中,而是将它们存储为作用域对象的属性。

因此,在控制器中,添加以下代码行:

$scope.forms = {
};

$scope.model = {
};

并在视图中使用

<ion-nav-buttons side="right">
  <a class="button button-icon icon ion-android-done" href="" ng-click="submitNewPublishMessage(forms.msgForm)"></a>
</ion-nav-buttons>
<ion-content> 
  <form name="forms.msgForm" class="css-form" novalidate>   
    <input type="text" name="title" ng-model="model.title" ng-minlength="10" ng-maxlength="150" required>

注意以上

  • 除了 msgForm 之外不传递 msgForm.$valid 标志,因为它是多余的
  • 不在 NgFormController 本身中存储表单的模型(即在表单字段中输入的值)。这样做会导致输入小部件和输入模型之间发生冲突。

如果我是你,我真的会非常非常避免使用链接来提交表单。链接用于导航,而不是用于表单提交。使用按钮。