我想拦截所有路由更改与Sammy首先检查是否有待处理的操作.我已经使用sammy.before API完成了这一点,我返回false以取消路由.这将使用户保持在“页面”上,但仍会更改浏览器地址栏中的哈希值,并将路由添加到浏览器的历史记录.如果我取消路线,我不希望在地址栏和历史,但我希望地址保持不变.
目前,为了解决这个问题,我可以调用window.history.back(yuk)返回历史上的原始位置或sammy.redirect.这两个都不太理想.
有没有办法使sammy真正取消路由,所以它保持在当前的路线/页面,离开地址栏,并不添加到历史?
如果没有,是否有另一个路由库会这样做?
sammy.before(/.*/,function () { // Can cancel the route if this returns false var response = routeMediator.canLeave(); if (!isRedirecting && !response.val) { isRedirecting = true; // Keep hash url the same in address bar window.history.back(); //this.redirect('#/SpecificPrevIoUsPage'); } else { isRedirecting = false; } return response.val; });
解决方法
如果有人遇到这种情况,这里是我最后的地方.我决定使用sammy的context.setLocation功能来处理重置路由.
sammy.before(/.*/,function () { // Can cancel the route if this returns false var context = this,response = routeMediator.canLeave(); if (!isRedirecting && !response.val) { isRedirecting = true; toastr.warning(response.message); // toastr displays the message // Keep hash url the same in address bar context.app.setLocation(currentHash); } else { isRedirecting = false; currentHash = context.app.getLocation(); } return response.val; });