Ionic $Speicherort.Pfad() funktioniert im browser, aber nicht auf Geräte
So, ich habe den folgenden code, das ganze funktioniert im browser, aber aus irgendeinem Grund hält mich neu auszurichten zurück zum login auf die aktuelle Android-Gerät.
controllers.js
App.controller('LoginController', ['$scope', 'RequestService', '$location', 'OpenFB', '$rootScope', function($scope, RequestService, $location, OpenFB, $rootScope) {
$scope.provider = '';
$scope.loginFacebook = function() {
$scope.provider = 'facebook';
OpenFB.login('email, user_friends').then(
function () {
OpenFB.get('/me').success(function (user) {
localStorage.setItem('fbuser', JSON.stringify(user));
});
localStorage.setItem('provider', 'facebook');
RequestService.get($scope.baseUrl + 'user')
.success(function(data, status, headers, config){
$scope.user = data;
//Set our logged in var
localStorage.setItem('loggedIn', true);
//Check if the user has accepted EULA
if($scope.user.eula == 0) {
$location.path('/eula');
}
else
{
//TODO:Redirect to the users dashboard, when we have the routes.
console.log('EULA Accepted, Redirect somewhere else!');
}
});
},
function (error) {
localStorage.removeItem('loggedIn');
});
};
}]);
Ich habe gedebuggt oben und alles funktioniert wie es sollte, einmal FB angemeldet ist, fragt es die Datenbank, legt der Benutzer mit den Daten geschabt von Facebook und prüft dann, die Daten zu sehen, wenn die EULA akzeptiert wurde. Wenn nicht, dann sollte eine Weiterleitung an $location.path('/eula');
Routen
.config(function($httpProvider, $stateProvider, $urlRouterProvider) {
$httpProvider.interceptors.push('httpRequestInterceptor');
$urlRouterProvider.otherwise('/');
$stateProvider
.state('login', {
url: '/',
templateUrl: 'templates/login.html',
data: {
requireLogin: false
}
})
.state('eula', {
url: '/eula',
templateUrl: 'templates/eula.html',
data: {
requireLogin: true
}
})
.state('accept', {
url: '/accept',
templateUrl: 'templates/accept.html',
data: {
requireLogin: true
}
})
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
als Sie sind mit ui-router (standard-Ionischer), Sie soll Staaten.
Ersetzen :
$location.path('/eula');
durch$state.go('eula');
(und correspondign injiziert Abhängigkeit)
Youre problem zu haben scheint etwas zu tun mit der Ausführung.
OpenFB nicht umzusetzen verspricht.
Blick auf diese Zeilen:
Könnte es eine Weile dauern, bevor
OpenFB.get
gibt das Ergebnis zurück, aber der code ausgeführt wird, die folgenden Anweisungen sowieso, so dass Sie finden möglicherweise selbst in einer situation, wo Sie anrufen:bevor
OpenFB.get('/me')
hat es beendet die Ausführung.Die beste Lösung ist die Verwendung ngOpenFB die Umsetzung verspricht:
$q
verspricht.Es ist ein Beispiel hier.
Muss der code implementiert werden, wie diesen:
Jeder Aufruf liefert ein Versprechen, und Sie können verschachtelt werden. Die zweite
.then(
wird das Ergebnis der zweiten Verheißung (wenn es behoben ist)ngFB.api({path: '/me'})
.Seit dieser Aufruf gibt ein Versprechen mit den Objekt-Benutzer sind, werden Sie in der Lage, es zu Lesen, die in der Funktion.
Diesem code:
nicht wieder ein Versprechen, aber es ist ok, mit dieser Art von syntax.
In der Dritten
.then(
:werden Sie in der Lage zu Lesen den Wert von der vorherigen Anweisung (eula).
Bedenken Sie, dass ich noch nicht getestet, code, weil ich nicht über facebook, aber den Vorteil verspricht, ist zu vermeiden unbestimmten Ebenen von verschachtelten code
Ok, so das Problem gelöst, in meinem login-check-in .die run () - Methode meiner app hatte ich eine miss platziert " - Veranstaltung.preventDefault();' aufrufen, sobald dieser bewegt wurde, das funktioniert sowohl auf dem desktop-browser und auf meinem Gerät.