2017-10-09 74 views
1

我会尽力解释我的问题。我有一个网页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"); 
} 

但在这两种情况下,我有一个问题:如果 我在,我还没有从浏览器的网址我写B的URL的处理结束,并立即,它打破了我想要的状态。但如果我在B并再次充电,现在检测到页面已被重新加载。

我希望能让自己明白。

我能做什么?

+0

你应该改为从第3页根据你有什么数据 - 如果你没有来自页面1 + 2的数据(用户填写,如果没有输入,然后变量当你从ui导航到下一页时,由你设置),然后你重定向 –

回答

0

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

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

此外,$stateProvider允许你嵌套自定义控制器,它可以简化您做出决议页面。更多关于如何inject the results from the parent resolve into the child resolve function