0

モデル変数がフォーム内の非表示の入力フィールドに既にバインドされています。

ユーザーが送信ボタンを押すと、対応するバインドされたモデル変数を更新してこれらのフィールドを更新しようとしましたが、変更されません (サーバーにリクエストをダンプすると、常に古いデータを受け取ることに気付きました)。非表示の入力ではなく通常のテキスト入力を使用すると、すべてが正常に機能します

これが私のコードです:

<form name="bla bla" action="bla bla" method="post" ng-submit="updateForm()"> 
  <input type="hidden" name="token" ng-model= "extra.token" />
  <input type="hidden" name="filters" ng-model="extra.filters" />
  <button type="submit">
    submit form
  </button>
</form>

コントローラ

var app = angular.module(... // bla bla

app.controller('MyController', ['$scope', ctrlDef]);

function ctrlDef($scope) {
  $scope.extra = {};
  $scope.extra.token = '';
  $scope.extra.filters = '';

  $scope.updateForm = function() {
      $scope.extra.token = 'test1';
      $scope.extra.filters = 'test2';
  };
}
4

1 に答える 1

1

method標準の HTML フォーム属性 ( 、actionなど)を使用する場合、POST 要求の前に ngSubmit が確実に実行されるとは思いません。$htmlサービスを使用してリクエストを送信することをお勧めします。これには非同期であるという利点もあるため、現在のように非表示の iframe は必要ありません。

app.controller('MyController', ['$scope', '$html', ctrlDef]);

function ctrlDef($scope, $html) {
  $scope.extra = {};
  $scope.extra.token = '';
  $scope.extra.filters = '';

  $scope.updateForm = function() {
      $scope.extra.token = 'test1';
      $scope.extra.filters = 'test2';

      $http.post(extra, "your post url here").then(function (response) {
          // do stuff with the response here...
      });
  };
}
于 2016-02-08T15:24:28.380 に答える