如何在提交之前更新AngularJS中的隐藏表单数据?

16 浏览
0 Comments

如何在提交之前更新AngularJS中的隐藏表单数据?

我已经将我的模型变量绑定到表单中的一些隐藏输入字段中。\n当用户点击提交按钮时,我尝试通过更新相应的绑定模型变量来更新这些字段,但它们没有改变(我注意到当在服务器上转储请求时,我总是收到旧数据),同时我注意到当我使用普通文本输入而不是隐藏输入时,一切都正常工作。\n这是我的代码:\n表单:\n

\n控制器:\n

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';
  };
}

0
0 Comments

问题的原因是,使用标准的HTML表单属性(method,action等)时,ngSubmit事件不一定会在POST请求之前被可靠地执行。解决方法是使用$http服务来发送请求,这样也可以异步进行,不需要像目前这样使用隐藏的iframe。

代码中的控制器定义了一个名为MyController的控制器。在这个控制器中,定义了$scope.extra对象,它具有token和filters属性。updateForm函数用来更新表单中的隐藏数据,并通过$http.post方法发送POST请求。在请求的回调函数中,可以对响应进行处理。

文章中还提到了不想使用XHR调用的原因,以及使用隐藏iframe的目的是在同一页中下载文件。同时也提到了如果有办法在JavaScript中下载文件而不需要使用外部库或弹出窗口,那么XHR是可以接受的。

最后,作者对于不使用外部库的情况下如何实现文件下载表示不确定,并且对自己的回答无法提供更多帮助表示抱歉。

0