【发布时间】:2015-04-20 22:30:33
【问题描述】:
我在使用 Angular UI 路由器的 Angular 应用程序中要求从一个屏幕 (URL) 返回到之前访问过的屏幕 (URL)。有几个屏幕 (URL) 可以访问目标页面。虽然它不像简单的history.back() 操作那么简单,因为我有几个临时状态可以以任何顺序和任何数量出现。为了解决这个问题,我在 Angular $location 服务周围实现了一个包装器,如下所示:
(function () {
'use strict';
angular
.module('myApp')
.factory('locn', ['$location', '$state',
function ($location, $state) {
var states = [];
return {
go: function (url) {
$location.path(url);
},
pushandgo: function (state, params) {
states.push({ name: $state.current.name, params: $state.params });
$state.go(state, params);
},
push: function (url) {
states.push(url);
},
pop: function () {
var state = states.pop();
$state.go(state.name, state.params);
},
search: function (searchDict) {
$location.search(searchDict);
}
};
}]);
})();
如您所见,这会将状态存储在locn 服务的javascript 局部变量中。我可以调用pushandgo,这意味着当我随后调用pop 时,我可以返回到我来自的页面(无论是哪个页面)。
这可以正常工作,直到用户在目标页面上刷新页面。
重新创建的 states 数组会丢失所有先前推送的状态。
除了使用 cookie 或本地存储(糟糕)之外,我正在努力想出一个很好的解决方案。
【问题讨论】:
标签: javascript angularjs browser-history html5-history