正如大多数开发人员所知道的,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/

10-10 21:43