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

Calling Angular service from outside JS via .scope().call() hangs request

本文关键字:服务 挂起 Angular 请求 JS scope call 通过 外部调用      更新时间:2023-09-26

我正在努力为我的 Angular 应用程序添加 Google+ 登录按钮,除了处理回调结果外,大部分都在工作。来自 G+ 登录的回调是一个名为 signinCallback 的外部 JS 函数,如下所示:

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

我能弄清楚如何将authResult传递回控制器的唯一方法是通过 element.scope() 调用控制器方法。 handleGoogleSignin称为 fine,在该函数中有一个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);调用函数,但我不确定。以前有人见过这个吗?

抱歉,

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

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