阻止从url导航到另一个页面

时间:2017-10-09 04:08:17

标签: javascript angularjs

我会尝试解释我的问题。我有一个网页A,当我在A完成一个过程时,我可以转到第B页。当我在B页完成一个过程时,我可以转到第C页,因此我可以有n个页面。到页面n。 我希望用户永远无法访问页面C,如果他没有首先访问页面A或页面B.换句话说,我想强制用户使用页面的内部导航。也就是说用户无法在浏览器中写入url或重新加载页面,如果发生这种情况,应将其重定向到特定页面。

从角度来看,在进入任何特定控制器之前设置了一些条件。

//similar to $statechange
angularRoutingApp.run(function ($rootScope, $state, $location, $transitions) 
{
$transitions.onStart({}, trans = > {
    $state.go('anystate', trans.targetState())
 });
}

从javascript中我知道何时重新加载页面。

if ($window.performance.navigation.type == 1) {
 console.info( "This page is reloaded" );
} else {
console.info( "This page is not reloaded");
}

但在这两种情况下我都有问题: 如果我在A中并且我还没有完成该过程并且立即从浏览器url我写了B的url,它打破了我想要的条件。但如果我在B中再次充电,现在检测到页面已重新加载。

我希望让自己明白。

我能做什么?

1 个答案:

答案 0 :(得分:0)

Angular被设计为单页应用程序,并且在刷新时不喜欢它。为此,您需要存储您的信息(在会话,Cookie等中),然后在您知道自己确定的位置后执行操作。

要处理对不同页面的访问,我建议您在配置中使用解析器。您将检查存储的数据并相应地重定向。在您的路线更改之前解决与承诺的交易,因此它会在angularRoutingApp.run()

之前运行

此外,$stateProvider允许您使用自定义控制器嵌套页面,这可以简化您的解析。有关如何inject the results from the parent resolve into the child resolve function

的更多信息