【问题标题】:Angular form submission with ng-submit not getting called未调用 ng-submit 的 Angular 表单提交
【发布时间】:2014-11-22 13:38:28
【问题描述】:

我正在尝试使用 Angular 进行简单的提交,但是 $scope.account_create.submit 函数在提交时永远不会被调用,我将 name 属性添加到表单中,确保提交按钮位于表单标签内,但仍然没有运气

控制器

var tapp = angular.module('tailorapp.controllers').controller(
  'AccountCtrl', 
  ['$scope', '$state' , '$stateParams', '$ionicLoading', '$resource', 'localStorageService', 'settings', 'api', 'notification',
  function($scope, $state, $stateParams, $ionicLoading,  $resource, localStorageService, settings, api, notification) {

    var _returnPath = $stateParams.returnPath;
    $scope.mode = "signup";
    $scope.account_create = {};

    $scope.showSignIn = function(){
      $scope.mode = "signin";
    };
    $scope.showSignUp = function(){
      $scope.mode = "signup";
    };   

   $scope.account_create.submit = function(item, event) {
        _create_account($scope.account_create).success(function(data){
          $state.go( _returnPath );
        });
    };

HTML

<ion-view title="Account">

<ion-nav-buttons side="right">
    <button class="button button-icon icon ion-bag righthd-icon" ng-click="gotoCart();"></button>
    <button class="button button-icon icon ion-person righthd-icon"></button>
</ion-nav-buttons>

<ion-nav-buttons side="left">
    <button menu-toggle="left" class="button button-icon icon ion-navicon"></button>
</ion-nav-buttons>

<ion-content class="has-header">

    <div ng-show="mode == 'signup'">
        <form name="account_create"  ng-submit="account_create.submit()">
            <div class="card">
...
                <div class="item item-divider">
                    <button class="button button-positive" type="submit">Create Account</button>

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    我发现当没有在表单元素上直接调用 ng-controller 或在表单元素之前直接调用的元素时,不会调用 ng-submit。在 8 小时试图弄清楚为什么在 ng-submit 中什么都没有发生之后,我不得不找出这样的规则,我真的很生气。

    【讨论】:

    • 这是一个非常重要的部分,我怀疑但我在其他任何地方都没有提到。
    • 我在这里遇到了同样的问题,我找了好几个小时才找到这个错误,谢谢,但我不明白为什么
    【解决方案2】:

    您的表单名称也是 account_create。所以 Angular 用支持表单指令的 NgFormController 实例替换了你自己的包含提交函数的 acount_create 对象。

    【讨论】:

      【解决方案3】:

      当您将属性name 添加到表单时,您正在使用该名称在 $scope 中创建一个变量。在您的代码中,通过添加name="account_create",您将覆盖控制器中定义的$scope.account_create。

      https://docs.angularjs.org/api/ng/directive/form

      如果您重命名表单,它应该可以工作。

      【讨论】:

      • 哪个变量名?帐户创建?刚试了一下,还是一样的旧
      • 我没有注意到您在为表单命名,请查看我的编辑
      猜你喜欢
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 2018-10-14
      • 2023-03-12
      • 1970-01-01
      • 2015-11-13
      相关资源
      最近更新 更多