我正在努力为我的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);
调用函数,但我不确定。有人见过这个吗?
答案 0 :(得分:4)
很抱歉我无法测试,但我认为您应该致电.$apply()
,因为该行动是在AngularJS范围之外触发的。
function signinCallback(authResult) {
angular.element($("#btnGooglePlus")).scope().handleGoogleSignin(authResult);
angular.element($("#btnGooglePlus")).scope().$apply();
}