使用浏览器后退按钮时不保存角度范围变量?

时间:2014-08-20 18:46:44

标签: javascript angularjs

我有一个AugularJS控制器,在初始化时有类似的内容

$scope.urlChanged = false;
and the url is like /firstpage/test

页面中有一个按钮,当用户点击按钮时,执行以下操作

$scope.urlChanged = true;
window.location = '/secondpage/test';

页面按预期进入/ secondpage / test。单击浏览器后退按钮时,页面将返回/firstpage/test。但$scope.urlChangedfalse,而非最终值为true。这在Angular有望吗?回去后如何制作$scope.urlChanged = true

2 个答案:

答案 0 :(得分:2)

导航时不会保存范围变量。事实上,甚至服务都不会保留他们的价值观/国家。当您使用浏览器返回时,您实际上会请求一个全新的角度应用程序。

这不是有角度的错误。这就是浏览器应该如何处理新请求。在这种情况下持久保存数据的方法是将任何数据保存在请求之间持续存在的内容中。

我认为你有三个(ish)选项:

  1. 在Cookie中保存状态:几乎所有浏览器都支持但是请谨慎处理它们作为客户端cookie或者您无法在未提交的页面上保存数据(令人兴奋的是导航回来的问题)浏览器)。
  2. 保存服务器端。这与服务器端cookie具有相同的问题。您需要将数据发布到服务器以使其保持不变 - 您可以使用ajax调用并自动保存'具有超时功能。您还需要一种跟踪自己的方式,以便从服务器获取正确的数据 - 通常使用cookie完成,但可以使用查询字符串参数完成,也可以使用(基本)身份验证。
  3. localStorage的。如果您不需要支持旧版IE浏览器,这是我最喜欢的选项并得到很好的支持。有很好的框架设计用于角度,使其易于使用 - 如果不支持,有些甚至可以回退到cookie。
  4. 查看此链接以获取LocalStorage支持: https://github.com/grevory/angular-local-storage

答案 1 :(得分:0)

在视图改变时,新控制器进入画面,前一个视图的控制器实例完成。此外,由于每个控制器的私有范围都会在更改视图后被销毁,以避免混淆。