我会尽力解释我的问题。我有一个网页A,当我完成A中的一个过程时,我可以转到页面B。当我完成页面B上的过程时,我可以转到页面C。因此我可以有n个页面。到第 n 页。 我希望用户如果没有先访问页面 A 或页面 B,就永远无法访问页面 C。换句话说,我想强制用户使用页面的内部导航。也就是说用户不能在浏览器中写入url,或者重新加载页面,如果发生这种情况,应该重定向到特定页面。
从 Angular 来看,这设法在进入任何特定 Controller 之前设置一些条件。
//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再充值,现在检测到页面已经重新加载了。
我希望让自己被理解。
我能做什么?
最佳答案
Angular 被设计为单页应用程序,并且不喜欢刷新时的情况。为此,您需要存储您的信息(在 session 、cookie 等中),然后在确定自己所在位置后执行操作。
为了处理对不同页面的访问,我建议在您的配置中使用解析器。您将检查存储的数据并相应地重定向。在路线更改之前解决 promise 的交易,因此它会在 angularRoutingApp.run()
之前运行
此外,$stateProvider
允许您使用自定义 Controller 嵌套页面,这可以简化您的解析。更多关于如何inject the results from the parent resolve into the child resolve function
关于javascript - 防止从 url 导航到另一个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46638736/