我正在嘗試使用Google API Javascript客戶端在我的應用中使用Google登錄,然後訪問用戶的電子郵件地址和聯繫人。我將這與AngularJS結合起來,並且我已經讀過,最好把它做成自己的服務。使用Google API將AngularJS服務的變量傳遞給控制器?
這是迄今爲止該服務的代碼:
.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