3

Resolve是一个有趣的属性,它可以防止显示有关处理 promise 结果(已解决或已拒绝)的某些条件逻辑的模板。

我在我的应用程序中使用它,这是一个概念示例:

.config(['$routeProvider', 'securityAuthorizationProvider',
        function ($routeProvider, securityAuthorizationProvider) {
              $routeProvider.when('/test', {
                  templateUrl: '/myCorrespondingView.tpl.html',
                  controller: 'MyCorrespondingCtrl',
                  resolve: securityAuthorizationProvider.requireAuthenticatedUser
              });
        }])

/myCorrespondingView.tpl.html因此,当且仅当securityAuthorizationProvider.requireAuthenticatedUser解决(承诺期限)时,此代码才期望显示内容。

http://myApp.com/test我的期望是:如果此承诺resolve部分被拒绝,我不想将 URL 更改为。原因很简单,如果我的拒绝逻辑是让用户在他的当前页面上(因此需要重定向到后者),我不想无用地重新加载以前的控制器。

resolve除了将条件逻辑从源头转移到前一个控制器之外,是否有一种有效的方法可以通过该属性实现此目的?

4

2 回答 2

0

前段时间我正在处理类似的问题。securityAuthorizationProvider.requireAuthenticatedUser我的解决方案是将用户重定向到登录页面 -如果用户未登录,您可以使用用户来自的页面 - 在身份验证提供程序(在您的情况下是)中。

于 2015-03-28T16:47:14.650 回答
0

我知道这是一个老问题,但对于所有正在寻找答案的用户,我将提供我的解决方案。

我有一个弹出/模态/警报,无论显示在整个页面上。在此弹出窗口中是历史记录,因此您可以打开新视图并返回旧视图。
我添加了一项功能,您可以使用鼠标或浏览器上的后退按钮返回。

我的js:

SYSTEM.run( [ "$rootScope", "Popup", function( $rootScope, Popup ) {
    $rootScope.$on( "$routeChangeStart", function ( e ) {
        if ( $rootScope.popup ) {
            Popup.back();
            e.preventDefault();
            return;
        }
    } );
} );

因此,您可以做的是,获取下一条路线(在 $routeChangeStart 中提供)并检查此 url 是否安全并运行您的服务。如果您的服务被解析重定向到 url 并将检查变量设置为 true/false,那么在下一次更改时您将不会再次检查您的服务。

希望有帮助。

于 2016-01-29T09:04:29.450 回答