Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS/仅当相应的模板';s的resolve属性已解决_Javascript_Angularjs_Routes - Fatal编程技术网

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谢谢你的链接。它允许我配置一个监听器来决定是否重定向页面,而不考虑目标受保护页面的
解析
的承诺结果。但是,如果我选择不重定向(意思是如果存在
上一个
控制器),页面不会重定向(嗯:),但是当我再次单击受保护的链接时,没有发生任何事情=>就像角度检查一样:“如果你试图
解析
一个页面,但你已经在那里,我不想
解析
!”因此,我的弹出窗口不再显示。有解决最后一个问题的办法吗?再次感谢。很遗憾没有,对不起。不过,我稍后会做一些研究。如果我发现一些有用的东西,我会在这里发表评论。