Я пытаюсь использовать Javascript-клиент Google API для использования входа в Google для своего приложения, а затем доступа к электронному адресу и контактам пользователя. Я сочетаю это с AngularJS, и я читал, что лучше всего сделать это своим Сервисом.Передача переменных из службы AngularJS контроллеру с помощью API Google?
Вот код для службы до сих пор:
.service('googleLogin', ['$http', '$rootScope', function ($http, $rootScope) {
var clientId = '{MY CLIENT KEY}',
apiKey = '{MY API KEY}',
scopes = 'https://www.googleapis.com/auth/userinfo.email https://www.google.com/m8/feeds',
domain = '{MY COMPANY DOMAIN}';
this.handleClientLoad = function() {
// Step 2: Reference the API key
gapi.client.setApiKey(apiKey);
gapi.auth.init(function() { });
window.setTimeout(checkAuth, 1);
};
this.checkAuth = function() {
gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: true, hd: domain }, this.handleAuthResult);
};
this.handleAuthResult = function(authResult) {
if (authResult && !authResult.error) {
gapi.client.load('oauth2', 'v2', function() {
var request = gapi.client.oauth2.userinfo.get();
request.execute(function (resp) {
console.log(userEmail);
});
});
}
};
this.handleAuthClick = function (event) {
// Step 3: get authorization to use private data
gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: false, hd: domain }, this.handleAuthResult);
return false;
};
}]);
Затем я называю это из контроллера со следующим:
$scope.login = function() {
googleLogin.handleAuthClick();
};
Который работает, и API называется правильно. Но теперь я не уверен, как получить данные из API через службу. Мне нужно получить адрес электронной почты пользователя, а также список их контактов. Я не могу просто иметь отдельные функции get
, которые возвращают эти значения, потому что кажется, что клиентские вызовы API должны выполняться в цепочках (например, handleAuthResult
вызывается как параметр в handleAuthClick
).
Я также попытался установить их как значения $rootScope
, либо просто обычные переменные, но как только контроллер называет их, они всегда появляются как undefined
.
Я подхожу к этому правильно? Как я могу получить эти переменные из Google API, в службу, в контроллер? Благодарю.
Что означает 'метод handleClientLoad' делать? Похоже, это процедура инициализации. Это автоматически вызывается при загрузке однопользовательской службы? –
@JimG. Я написал этот код уже давно, и похоже, что это будет процедура инициализации, но это определенно нигде не называется. Может быть излишним/ненужным? – Jakemmarsh