Ich arbeite daran, einen Google+ Anmeldebutton zu meiner Angular-App hinzuzufügen, und es funktioniert größtenteils, außer für die Verarbeitung des Callback-Ergebnisses. Der Callback von der G+ Anmeldung ist eine externe JS-Funktion namens signinCallback
, die wie folgt aussieht:
//Die Google+ Anmeldung wird hier verarbeitet
function signinCallback(authResult) {
angular.element($("#btnGooglePlus")).scope().handleGoogleSignin(authResult);
}
Der einzige Weg, den ich herausfinden konnte, um das authResult
zurück in den Controller zu übergeben, war, eine Controller-Methode über element.scope()
aufzurufen. handleGoogleSignin
wird erfolgreich aufgerufen, und innerhalb dieser Funktion gibt es einen http.get
Service-Aufruf, der wie folgt aussieht:
User.getSocialKey(key).then(function(data) {
console.log(data);
});
User
ist ein Service, und getSocialKey
sieht so aus:
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;
});
},
Die erste Log-Anweisung wird erfolgreich erreicht, dann passiert nichts. Die Anfrage wird nie gesendet. Wenn ich jedoch auf der Seite auf etwas klicke, das ein ng-model
Attribut hat (zum Beispiel, ein Kontrollkästchen), wird die Anfrage dann gesendet und empfangen. Also meine Frage: Warum wird mein Angular-Service-Aufruf ausgesetzt, bis ich auf etwas klicke? Warum wird er nicht sofort durchgeführt?
Ich habe versucht, getSocialKey
durch funktionierende Service-Aufrufe zu ersetzen, aber das gleiche Problem tritt auf. Ich glaube, das Problem liegt darin, die Funktion mit angular.element($("#btnGooglePlus")).scope().handleGoogleSignin(authResult);
aufzurufen, bin mir aber nicht sicher. Hat das schon mal jemand gesehen?