Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在AngularJS中使用Factory服务?_Angularjs_Angular Services - Fatal编程技术网

如何在AngularJS中使用Factory服务?

如何在AngularJS中使用Factory服务?,angularjs,angular-services,Angularjs,Angular Services,我在GitHub上找到了这项服务(见下文),想知道如何在>点击按钮时使用这项服务。我在我的Ionic应用程序中使用它,以便使用Google+OAuth登录 我对AngularJS是新手。帮帮我 var googleLoginService = angular.module('GoogleLoginService', ['ngStorage']); googleLoginService.factory('timeStorage', ['$localStorage', function ($

我在GitHub上找到了这项服务(见下文),想知道如何在>点击按钮时使用这项服务。我在我的Ionic应用程序中使用它,以便使用Google+OAuth登录

我对AngularJS是新手。帮帮我

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");
}