如何在AngularJS中使用Factory服务?
我在GitHub上找到了这项服务(见下文),想知道如何在>点击按钮时使用这项服务。我在我的Ionic应用程序中使用它,以便使用Google+OAuth登录 我对AngularJS是新手。帮帮我如何在AngularJS中使用Factory服务?,angularjs,angular-services,Angularjs,Angular Services,我在GitHub上找到了这项服务(见下文),想知道如何在>点击按钮时使用这项服务。我在我的Ionic应用程序中使用它,以便使用Google+OAuth登录 我对AngularJS是新手。帮帮我 var googleLoginService = angular.module('GoogleLoginService', ['ngStorage']); googleLoginService.factory('timeStorage', ['$localStorage', function ($
var googleLoginService = angular.module('GoogleLoginService', ['ngStorage']);
googleLoginService.factory('timeStorage', ['$localStorage', function ($localStorage) {
var timeStorage = {};
timeStorage.cleanUp = function () {
var cur_time = new Date().getTime();
for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
if (key.indexOf('_expire') === -1) {
var new_key = key + "_expire";
var value = localStorage.getItem(new_key);
if (value && cur_time > value) {
localStorage.removeItem(key);
localStorage.removeItem(new_key);
}
}
}
};
timeStorage.remove = function (key) {
this.cleanUp();
var time_key = key + '_expire';
$localStorage[key] = false;
$localStorage[time_key] = false;
};
timeStorage.set = function (key, data, hours) {
this.cleanUp();
$localStorage[key] = data;
var time_key = key + '_expire';
var time = new Date().getTime();
time = time + (hours * 1 * 60 * 60 * 1000);
$localStorage[time_key] = time;
};
timeStorage.get = function (key) {
this.cleanUp();
var time_key = key + "_expire";
if (!$localStorage[time_key]) {
return false;
}
var expire = $localStorage[time_key] * 1;
if (new Date().getTime() > expire) {
$localStorage[key] = null;
$localStorage[time_key] = null;
return false;
}
return $localStorage[key];
};
return timeStorage;
}]);
googleLoginService.factory('googleLogin', [
'$http', '$q', '$interval', '$log', 'timeStorage',
function ($http, $q, $interval, $log, timeStorage) {
var service = {};
service.access_token = false;
service.redirect_url = 'http://127.0.0.1:81/google_demo/www/';
service.client_id = '1234567890';
service.secret = 'xxxxxxxxxxxxxxxxx';
service.scope = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.me';
service.gulp = function (url, name) {
url = url.substring(url.indexOf('?') + 1, url.length);
return url.replace('code=', '');
};
service.authorize = function (options) {
var def = $q.defer();
var self = this;
var access_token = timeStorage.get('google_access_token');
if (access_token) {
$log.info('Direct Access Token :' + access_token);
service.getUserInfo(access_token, def);
} else {
var params = 'client_id=' + encodeURIComponent(options.client_id);
params += '&redirect_uri=' + encodeURIComponent(options.redirect_uri);
params += '&response_type=code';
params += '&scope=' + encodeURIComponent(options.scope);
var authUrl = 'https://accounts.google.com/o/oauth2/auth?' + params;
var win = window.open(authUrl, '_blank', 'location=no,toolbar=no,width=800, height=800');
var context = this;
if (ionic.Platform.isWebView()) {
console.log('using in app browser');
win.addEventListener('loadstart', function (data) {
console.log('load start');
if (data.url.indexOf(context.redirect_url) === 0) {
console.log('redirect url found ' + context.redirect_url);
console.log('window url found ' + data.url);
win.close();
var url = data.url;
var access_code = context.gulp(url, 'code');
if (access_code) {
context.validateToken(access_code, def);
} else {
def.reject({error: 'Access Code Not Found'});
}
}
});
} else {
console.log('InAppBrowser not found11');
var pollTimer = $interval(function () {
try {
console.log("google window url " + win.document.URL);
if (win.document.URL.indexOf(context.redirect_url) === 0) {
console.log('redirect url found');
win.close();
$interval.cancel(pollTimer);
pollTimer = false;
var url = win.document.URL;
$log.debug('Final URL ' + url);
var access_code = context.gulp(url, 'code');
if (access_code) {
$log.info('Access Code: ' + access_code);
context.validateToken(access_code, def);
} else {
def.reject({error: 'Access Code Not Found'});
}
}
} catch (e) {
}
}, 100);
}
}
return def.promise;
};
service.validateToken = function (token, def) {
$log.info('Code: ' + token);
var http = $http({
url: 'https://www.googleapis.com/oauth2/v3/token',
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
params: {
code: token,
client_id: this.client_id,
client_secret: this.secret,
redirect_uri: this.redirect_url,
grant_type: 'authorization_code',
scope: ''
}
});
var context = this;
http.then(function (data) {
$log.debug(data);
var access_token = data.data.access_token;
var expires_in = data.data.expires_in;
expires_in = expires_in * 1 / (60 * 60);
timeStorage.set('google_access_token', access_token, expires_in);
if (access_token) {
$log.info('Access Token :' + access_token);
context.getUserInfo(access_token, def);
} else {
def.reject({error: 'Access Token Not Found'});
}
});
};
service.getUserInfo = function (access_token, def) {
var http = $http({
url: 'https://www.googleapis.com/oauth2/v3/userinfo',
method: 'GET',
params: {
access_token: access_token
}
});
http.then(function (data) {
$log.debug(data);
var user_data = data.data;
var user = {
name: user_data.name,
gender: user_data.gender,
email: user_data.email,
google_id: user_data.sub,
picture: user_data.picture,
profile: user_data.profile
};
def.resolve(user);
});
};
service.getUserFriends = function () {
var access_token = this.access_token;
var http = $http({
url: 'https://www.googleapis.com/plus/v1/people/me/people/visible',
method: 'GET',
params: {
access_token: access_token
}
});
http.then(function (data) {
console.log(data);
});
};
service.startLogin = function () {
var def = $q.defer();
var promise = this.authorize({
client_id: this.client_id,
client_secret: this.secret,
redirect_uri: this.redirect_url,
scope: this.scope
});
promise.then(function (data) {
def.resolve(data);
}, function (data) {
$log.error(data);
def.reject(data.error);
});
return def.promise;
};
return service;
}
]);
var googleLoginService=angular.module('googleLoginService',['ngStorage']);
googleLoginService.factory('timeStorage',['$localStorage',function($localStorage){
var timeStorage={};
timeStorage.cleanUp=函数(){
var cur_time=new Date().getTime();
for(var i=0;i值){
localStorage.removietem(键);
localStorage.removietem(新的_键);
}
}
}
};
timeStorage.remove=功能(键){
这个.cleanUp();
var time_key=key+''u expire';
$localStorage[key]=false;
$localStorage[time_key]=false;
};
timeStorage.set=功能(键、数据、小时){
这个.cleanUp();
$localStorage[key]=数据;
var time_key=key+''u expire';
var time=new Date().getTime();
时间=时间+(小时*1*60*60*1000);
$localStorage[time\u key]=时间;
};
timeStorage.get=函数(键){
这个.cleanUp();
var time_key=key+“_expire”;
if(!$localStorage[时间\键]){
返回false;
}
var expire=$localStorage[time\u key]*1;
如果(新日期().getTime()>过期){
$localStorage[key]=null;
$localStorage[time_key]=null;
返回false;
}
返回$localStorage[key];
};
返回时间存储;
}]);
googleLogin服务工厂(“googleLogin”[
“$http”、“$q”、“$interval”、“$log”、“timeStorage”,
函数($http、$q、$interval、$log、timeStorage){
var服务={};
service.access_token=false;
service.redirect\u url='0http://127.0.0.1:81/google_demo/www/';
service.client_id='1234567890';
service.secret='xxxxxxxxxxxxxxx';
service.scope=https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.me';
service.gulp=函数(url、名称){
url=url.substring(url.indexOf(“?”)+1,url.length);
返回url.replace('code=','');
};
service.authorize=功能(选项){
var def=$q.defer();
var self=这个;
var-access\u-token=timeStorage.get('google\u-access\u-token');
if(访问令牌){
$log.info('直接访问令牌:'+访问令牌);
getUserInfo(访问令牌,def);
}否则{
var params='client_id='+encodeURIComponent(options.client_id);
params+='&redirect_uri='+encodeURIComponent(options.redirect_uri);
参数+='&响应类型=代码';
params+='&scope='+encodeURIComponent(options.scope);
var authUrl=https://accounts.google.com/o/oauth2/auth?“+参数;
var win=window.open(authUrl,'.'空白','位置=no,工具栏=no,宽度=800,高度=800');
var context=this;
if(ionic.Platform.isWebView()){
console.log(“使用应用程序内浏览器”);
win.addEventListener('loadstart',函数(数据){
console.log('load start');
if(data.url.indexOf(context.redirect\u url)==0){
log('redirect url found'+context.redirect\u url);
log('windowurl-found'+data.url);
win.close();
var url=data.url;
var access_code=context.gulp(url,“code”);
if(访问代码){
validateToken(访问代码,def);
}否则{
拒绝({错误:'未找到访问代码'});
}
}
});
}否则{
console.log('InAppBrowser notfound11');
var pollTimer=$interval(函数(){
试一试{
log(“googlewindowurl”+win.document.url);
if(win.document.URL.indexOf(context.redirect\u URL)==0){
log(“找到重定向url”);
win.close();
$interval.cancel(轮询计时器);
pollTimer=false;
var url=win.document.url;
$log.debug('最终URL'+URL);
var access_code=context.gulp(url,“code”);
if(访问代码){
$log.info('访问代码:'+访问代码);
angular
.module('GoogleLoginService')
.controller('SomeController', SomeController);
function SomeController(timeStorage, googleLogin) {
// just call timeStorage and googleLogin
// ex:
var anydata = timeStorage.get("anykey");
}