覆盖$ location pushState历史AngularJS

时间:2013-07-25 13:53:46

标签: javascript angularjs

如果我是“结果页”的返回用户,我想查看我使用过的最后一个过滤器。所以我使用ngCookies来更新页面上最后使用的搜索参数。

controller('Results', ['$location','$cookies',function($location,$cookies){
    $location.search(angular.fromJson($cookies.search));
}]);

//will yield: /results?param1=dude&param2=bro

但是,如果我点击“ back ”,我将不会被带到我期望的最后一页。

那是因为另一个州被推到了历史上但却没有被用户察觉。

用户登陆/results,但控制器立即将/results?param1=dude&param2=bro推送到州历史记录中。

如何覆盖或删除状态/results,以便“返回”会将我返回到用户期望他们来自的最后一页的位置?

1 个答案:

答案 0 :(得分:10)

replace()链接到$ location.search电话的末尾:

controller('Results', ['$location','$cookies',function($location,$cookies){
    $location.search(angular.fromJson($cookies.search)).replace();
}]);

这会导致替换最后一个历史记录条目,而不是添加新条目。

还有reloadOnSearch选项,您可以将其设置为false,以防止在搜索参数更改时重新加载路径(如果您希望后退按钮转到/results)。