Angular:在异步调用

时间:2015-07-27 11:24:46

标签: javascript angularjs login

我有以下情况:

  • 用户尝试使用错误的密码登录
  • 失败时我问他是否要重置密码
  • 如果用户点击“确定”(纯confirm dialog),我会打开包含一些网址的新标签。

我的问题是:我总是遇到弹出窗口阻止程序,因为我只在错误回调后生成window。以下是相关代码login方法:

 $scope.login = function () {

            $auth.login({
                email: $scope.fields.email,
                password: $scope.fields.password
            })
                .then(function () {

                        // ... login success
                })
                .catch(function () {

                  // login failed (my case)

                 if (confirm('ERROR: Invalid password, forgot Password? Click \'OK\' if you want to reset it')){

                   var url_ = 'http://meeter.me/#/forgot-pass/snaggs@gmail.com';

                    var myPopup = window.open ('',  '_blank');


                    myPopup.location = url_;
                    if (myPopup && myPopup.focus) {
                      myPopup.focus();
                    }       
                 }// if


                });

        };

如果我将var myPopup = window.open ('', '_blank');移到$scope.login = function ()下的下一行,它会有效,但会打开新的空标签。

我想在登录时出现错误

时才打开新标签页

我使用satellizer

请帮忙,

Plunker Demo

在演示中,我使用单$timeout来模拟异步调用

1 个答案:

答案 0 :(得分:0)

我不认为如果异步调用window.open就可以打开一个新窗口。在没有用户调用的情况下,调用堆栈总是要识别window.open是异步触发并阻止它。如果登录失败,可以选择显示一个新按钮并让该按钮打开一个新窗口?

http://plnkr.co/edit/QGfnxH484OdTvaaOvMaE?p=preview

<button ng-click="init();">press  me</button><br />
<span ng-show="resetPwd" >
Login Failed!! <button ng-click="reset()">Reset Password</button>
</span>

$scope.init = function() {
  $timeout(function() {
    $scope.resetPwd = true;
  }, 2000);
}