3

我正在向我的 Angular 应用程序添加一个 Google+ 登录按钮,并且其中大部分都在工作,除了回调结果的处理。G+ 登录的回调是一个外部 JS 函数signinCallback,调用如下:

//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);但我不确定。有人见过这个吗?

4

1 回答 1

4

抱歉,我无法测试,但我认为您应该调用.$apply(),因为该操作是在 AngularJS 范围之外触发​​的。

function signinCallback(authResult) {
    angular.element($("#btnGooglePlus")).scope().handleGoogleSignin(authResult);
    angular.element($("#btnGooglePlus")).scope().$apply();
}
于 2013-09-15T23:51:06.833 回答