javascript - 将 AngularJS 应用程序的修改状态保存到 URL

标签 javascript url angularjs state browser-history

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

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

最佳答案

您可以将其序列化为 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 路由的 Controller ,使用 $routeParams 来访问 :data URL 中的参数。

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

关于javascript - 将 AngularJS 应用程序的修改状态保存到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16957183/

相关文章:

javascript - 在正则表达式中,当字符不在其他字母字符中时如何查找和替换字符?

javascript - 浏览器中的 3d 曲面图

angularjs - $uibModal 尝试在我的表单中强制执行提交

javascript - Html 和 Angular : why doesn't my variable update?

javascript - 每 15 秒更改一次背景图像

asp.net - 如何使用 ASP.Net Ajax $addHandler 将参数传递给被调用函数

java - 在不忘记分隔符的情况下安全连接 URL 的正确方法是什么?

ios - 来自相机视频的数据返回零

javascript - 如何通过 javascript 将所有 href 链接附加到重定向器 url

javascript - CoffeeScript - 不允许在 Angular 表达式中引用 DOM 节点