3

我有一个相当复杂的 HTML 表单,用户填写并提交。在提交时,我们重定向到第三方网站,根据表单值生成重定向参数。然后,如果用户对第三方网站上的结果不满意,他们会按下浏览器的“返回”按钮,然后返回表单。在这一点上,他们希望看到表单控件处于重定向之前离开它们的状态。

在 Backbone.js中,我可以 app.navigate("/form-view/STATE-OF-THE-FORM-SERIALIZED")在重定向之前调用,表单的状态将保存到浏览器的历史记录中——在 URL 片段中。我将如何为 AngularJS 实现相同的行为?我读过$location服务,但它不提供那种功能。当我调用path(SMTH)它时,它总是触发路由处理程序;这不是我想要的,因为那时我必须重定向到外部页面。

4

1 回答 1

1

您可以以 JSON(或 QueryString)形式对其进行序列化。首先执行此操作,然后将参数作为 URL 的一部分构建 URL。

确保您有两个 URL:一个用于没有任何数据的表单,另一个用于当它有数据时。

$routeProvider.when('/form-data', { ... });
$routeProvider.when('/form-data/:data', { ... });

然后设置一个提交函数来处理传递数据。

$scope.submit = function() {
  var formData = JSON.stringify($scope.myModel);

  //redirect to internal angularjs page
  $location.path('/form-view/' + formData);

  //or redirect to a local external page
  $window.location = '/form-view/' + formData;
};

对于处理/form-data/:data路由的控制器,使用$routeParams它可以访问:dataURL 中的参数。

如果您希望它在另一个页面中弹出,那么您需要制作自己的指令来劫持表单提交事件并更改“action”属性以在处理本机提交之前将其更改为序列化格式。

于 2013-09-14T15:01:19.900 回答