正如大多数开发人员所知道的,Resolve属性允许保护对某些页面的访问。
以下是摘要代码的简短示例:
.config(['$routeProvider', 'securityAuthorizationProvider',
function ($routeProvider, securityAuthorizationProvider) {
$routeProvider.when('/test', {
templateUrl: '/myCorrespondingView.tpl.html',
controller: 'MyCorrespondingCtrl',
resolve: securityAuthorizationProvider.requireAuthenticatedUser
});
}])
让我们假设一个页面包含一个名为“单击此处以访问 protected 页面”的链接(在幕后制作一个
$location.path("/test")
)。期望是:当我单击它时,将
resolve
设置为rejected
,并且...不要重定向到除 call 者页面之外的任何其他页面。这不会导致...(用户无法访问页面这一简单事实就足够了),但URL更改为目标 protected 页面。
=>
myApp.com/test
(为什么Angular不会仅在成功的 promise 结果?? :(的情况下才进行此替换,但这是我刚刚问过的另一个问题:AngularJS / Changing the URL only when corresponding template's resolve property is solved)。然后...再次单击...
看来
resolve
仍然没有再处理。然后...单击应用程序上的其他链接(当然没有完全重定向),以便更改URL,然后重新单击 protected 链接=>
Resolve
将再次得到很好的处理。有没有一种Angular机制来检查当前页面URL和所需页面URL,并避免重新处理
resolve
任务(如果两者相同)?我确实想强制
resolve
处理,即使该URL已经对应于目标页面一也是如此。**更新 ********
从这篇文章:https://stackoverflow.com/a/12429133/985949
听起来我上面假设的检查确实是由
$location.path
方法完成的...如果可以强制进行评估,那就太好了。
最佳答案
角路由响应URL中的更改,而不响应点击。如果在浏览器中位置不变, Angular 将完全不会出现。
看来您应该做的是创建一个侦听“$ locationChangeSuccess”并跟踪上一条成功路线的服务。然后在$ routeChangeError上具有另一个侦听器,该侦听器会将位置重置为发生故障时的最后成功路由。这样可以防止您停留在位置与您当前的 Activity 路线不匹配的不一致状态。
完成此操作后,再次单击链接将使浏览器再次尝试更改位置,从而再次触发您的解决方案。
关于javascript - AngularJS/强制resolve属性随时运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19659183/