通过.scope()从外部JS调用Angular服务.call()挂起请求

时间:2013-09-15 21:17:03

标签: javascript ajax angularjs google-plus

我正在努力为我的Angular应用添加一个Google+登录按钮,除了处理回调结果外,其中大部分工作都正常。来自G + signin的回调是一个名为signinCallback的外部JS函数,看起来像这样:

//Handling the Google+ Signin right here
function signinCallback(authResult) {
angular.element($("#btnGooglePlus")).scope().handleGoogleSignin(authResult);
}

我能弄清楚如何将authResult传递回控制器的唯一方法是通过element.scope()调用控制器方法。 handleGoogleSignin称为正常,在该函数内部有一个http.get服务调用,如下所示:

User.getSocialKey(key).then(function(data) {
    console.log(data);
});

User是一项服务,getSocialKey如下:

getSocialKey: function(etag) {
    console.log("Hit the social key service with the etag: " + etag);
    return $http({
        url: '/api/user/social',
        method: 'post',
        data: {etag:etag}
    }).then(function(result) {
        console.log("Returning promise from social service");
        return result.data;
    });
},

第一个日志语句被点击,然后没有。永远不会发送请求。现在,如果我点击具有ng-model属性的页面上的内容(例如,复选框),则会发送并接收请求。所以我的问题:为什么我的Angular服务调用被暂停,直到我点击某些内容?为什么不立即通过?

我尝试用工作服务调用替换getSocialKey,同样的事情。我相信问题归结为用angular.element($("#btnGooglePlus")).scope().handleGoogleSignin(authResult);调用函数,但我不确定。有人见过这个吗?

1 个答案:

答案 0 :(得分:4)

很抱歉我无法测试,但我认为您应该致电.$apply(),因为该行动是在AngularJS范围之外触发​​的。

function signinCallback(authResult) {
    angular.element($("#btnGooglePlus")).scope().handleGoogleSignin(authResult);
    angular.element($("#btnGooglePlus")).scope().$apply();
}