Javascript AngularJS/仅当相应的模板';s的resolve属性已解决
是一个有趣的属性,用于防止显示有关处理承诺结果(已解决或已拒绝)的某些条件逻辑的模板 我在应用程序中使用它,下面是一个概念示例:Javascript AngularJS/仅当相应的模板';s的resolve属性已解决,javascript,angularjs,routes,Javascript,Angularjs,Routes,是一个有趣的属性,用于防止显示有关处理承诺结果(已解决或已拒绝)的某些条件逻辑的模板 我在应用程序中使用它,下面是一个概念示例: .config(['$routeProvider', 'securityAuthorizationProvider', function ($routeProvider, securityAuthorizationProvider) { $routeProvider.when('/test', {
.config(['$routeProvider', 'securityAuthorizationProvider',
function ($routeProvider, securityAuthorizationProvider) {
$routeProvider.when('/test', {
templateUrl: '/myCorrespondingView.tpl.html',
controller: 'MyCorrespondingCtrl',
resolve: securityAuthorizationProvider.requireAuthenticatedUser
});
}])
因此,当且仅当securityAuthorizationProvider.requireAuthenticatedUser
已解决时(承诺条款),此代码期望显示/myCorrespondingView.tpl.html
内容
我的期望是:我不想将URL更改为http://myApp.com/test
如果解决
部分中的此承诺被拒绝。原因很简单,如果我的拒绝逻辑是让用户进入当前页面(因此需要重定向到后者),我不想无用地重新加载以前的控制器
除了在源位置转移条件逻辑,即转移到前一个控制器中,是否有一种有效的方法可以通过
resolve
属性实现这一点?我不久前处理过一个类似的问题。我的解决方案是,如果用户未登录,则将用户重定向到身份验证提供程序(在您的情况下是securityAuthorizationProvider.requirereauthenticateduser
)中的登录页面-您可以使用用户来自的页面。我知道这是一个老问题,但对于所有正在寻找答案的用户,我会提供我的解决方案
我有一个弹出/模式/警报,无论它显示在整个页面上。在此弹出窗口中是一个历史记录,因此您可以打开一个新视图并返回到旧视图。我添加了一个功能,您可以使用鼠标或浏览器上的后退按钮返回 我的js:
SYSTEM.run( [ "$rootScope", "Popup", function( $rootScope, Popup ) {
$rootScope.$on( "$routeChangeStart", function ( e ) {
if ( $rootScope.popup ) {
Popup.back();
e.preventDefault();
return;
}
} );
} );
因此,您可以做的是,获取下一条路由(在$routeChangeStart中提供),并检查此url是否安全,然后运行您的服务。如果您的服务已解析,请重定向到url并将checking变量设置为true/false,以便在下一次更改时不再检查您的服务
希望这能有所帮助。文档说:“如果任何承诺被拒绝,$routeChangeError事件被触发”引自另一个问题:请注意,您可以通过:$rootScope全局侦听路由事件。$on(“$routeChangeStart”,回调),也适用于$routeChangeSuccess,$routeChangeError”。如果您希望显示加载程序、进度条和处理错误,则此功能非常有用我做错什么了吗?@Sprottenwels但URL发生了变化。想象一下当前页面上的用户:/index.html。然后他点击菜单上的“受保护页面”链接。由于他没有登录,身份验证弹出窗口正在打开,需要用户输入(打开时抛出
resolve
)。打开时,URL已标记为:/a-protected-page.html。因此,如果用户想要放弃身份验证,弹出窗口将关闭,但重定向到/index.html是必要的……毫无用处,尽管他已经在那里了。如果我处理$rootScope.$on
,我必须在许多控制器中重复这个逻辑。也许这可以帮助你:我现在不能自己看,因此我不知道那个家伙是否有解决你“我必须在每个控制器中都做”问题的方法。好luck@Sprottenwels谢谢你的链接。它允许我配置一个监听器来决定是否重定向页面,而不考虑目标受保护页面的解析
的承诺结果。但是,如果我选择不重定向(意思是如果存在上一个控制器),页面不会重定向(嗯:),但是当我再次单击受保护的链接时,没有发生任何事情=>就像角度检查一样:“如果你试图解析一个页面,但你已经在那里,我不想解析!”因此,我的弹出窗口不再显示。有解决最后一个问题的办法吗?再次感谢。很遗憾没有,对不起。不过,我稍后会做一些研究。如果我发现一些有用的东西,我会在这里发表评论。