32

コントローラー内から従来のフォーム送信を行いたいです。シナリオは、Web サーバーでルートをヒットし、その応答にリダイレクトしたいというものです。これは、HTML の通常のフォームで実行できますが、送信ボタンが押されたときにそのフィールドでいくつかの検証も実行したいと考えています。検証が失敗した場合、ルートを実行したくありません。

私は ng-valid を認識していますが、ボタンが押されたときにのみ検証が行われるようにしたいです。

コントローラー内から条件付きでフォーム送信を行う方法はありますか?

4

6 に答える 6

34

submit メソッドを FormController に追加できます。私はそうしました:

<form ng-form-commit action="/" name='payForm' method="post" target="_top">
    <input type="hidden" name="currency_code" value="USD">
    <button type='button' ng-click='save(payForm)'>buy</button>
</form>

.directive("ngFormCommit", [function(){
    return {
        require:"form",
        link: function($scope, $el, $attr, $form) {
            $form.commit = function() {
                $el[0].submit();
            };
        }
    };
}])

.controller("AwesomeCtrl", ["$scope", function($scope){
   $scope.save = function($form) {
     if ($form.$valid) {
         $form.commit();
     }
   };
}])
于 2014-08-03T08:04:16.600 に答える
8

フォームで ng-submit ディレクティブを使用しようとしましたか? 検証後に true/false を返すことができます。

コントローラ

app.controller('MainCtrl', ['$location', function($scope, $location) {
  $scope.submit = function(user) {
    var isvalid = true;
    // validation 
    if (isvalid) {
        $http.get('api/check_something', {}).then(function(result) {
            $location.path(result.data);
        });
        return true;
    }
    return false; //failed
  }
});

Html (action 属性を指定してはいけません)

<form name="formuser" ng-submit="submit(user)">
    <input type="text" ng-model="user.firstname" />
    <input type="text" ng-model="user.lastname" />
    <button type="submit">Submit</button>
</form>
于 2013-04-14T19:57:00.387 に答える
3

これは 'Angular' の方法ではありませんが、標準の JavaScript を使用してフォームを送信できます。たとえば、フォームに id を指定して次のようにすることができます。

document.getElementById('myForm').submit()

または、送信ボタンがある場合は、それをクリックできます。

document.getElementById('myForm-submit').click()

最初のものはデータバインディングを保持していないことがわかりました(Angularの代替手段がないJQueryウィジェットを含むプロジェクトで使用していました)が、2番目のものはバインディングを保持していました。これは、JQuery ウィジェットの作成方法に関係していると思います。

バニラ JS を使用したフォームのトリガーについて詳しくは、こちらをご覧ください。

javascriptを使用してフォームを送信するには?

于 2015-07-14T14:26:48.910 に答える
0

フォームが有効になるまで送信ボタンを完全に無効にするのはどうですか:

<button type="submit" ng-disabled="form.$invalid">Submit</button>

私が持っていたこの同様の質問を見てください: ディレクティブを使用したAngularJSフォーム検証-「myform.$valid」は私にはまったく正しくありません

于 2013-04-15T16:41:48.420 に答える