本文适用于angularjs创建的单页应用SPA,如vuejs或react.js不在本文讨论范围。我使用angularjs和sb-admin2来实现前端框架。不考虑浏览器的后退按钮,我使用$state和$stateParams来实现后退功能。当然我也可以创建一个全局的单例或者localstroge和sessiontorge来处理历史。跳转数据。项目上线后,客户反映页面跳转到3级或4级页面,点击浏览器后退按钮时,页面返回上级页面,提示缺少参数,数据上该页面也是空白的。为了解决这个问题,我的解决方案是禁用浏览器的后退按钮。解决方法如下:在angular.module("appId").run()方法中,使用$locationChangeStart监听url地址的变化。代码如下:$rootScope.$on('$locationChangeStart',function(ev,to,from){if($rootScope.previousState&&$rootScope.nowState&&$rootScope.previousState==to){console.log('notback');ev.preventDefault();}else{$rootScope.previousState=from;$rootScope.nowState=to;}});这样就可以避免前面的问题了,但是我也发现了一个小bug。虽然浏览器的后退按钮被禁用了,但是当用户在业务页面点击后退按钮时,虽然页面成功返回到上一个页面,但是浏览器地址栏中的url并没有改变。再次点击后退按钮时,url恢复正常。因为对功能没有影响,所以没有进一步了解问题所在。如果有人解决或理解了问题,请告诉我。
