2016-08-11 6 views
0

Ich verwende MobileFirst v8 und Ionic v1.3.1, um eine App zu erstellen. Wenn die App startet ich den regulären Ionenwinkel Code in meiner app.js Datei DiesesWarten auf Abschluss der Async-Aufgabe Vor dem Starten von Angular JS

haben app.js

.run(function($ionicPlatform) { 
    $ionicPlatform.ready(function() { 
    ... 
    }) 
.controller('IndexCtrl', function($scope, $state) { 
    RememberMeService.checkIfLoggedIn().success(function(data) { 
     alert("YAY!!"); 
    }).error(function(data) { 
     alert('fail :('); 
    }); 

}); 

function wlCommonInit() { 
var serverUrl = WL.App.getServerUrl(function(success){ 
    console.log(success); 
}, function(fail){ 
    console.log(fail); 
}); 

WLAuthorizationManager.obtainAccessToken().then(
    function (accessToken) { 
     console.log(">> Success - Connected to MobileFirst Server");  
    }, 
    function (error) { 
     console.log(">> Failed to connect to MobileFirst Server"); 
     console.log(error);   
    } 
); 

Dies ist die RememberMeService

.service('RememberMeService', function($q) { 
return { 
    checkIfLoggedIn: function() { 
     var deferred = $q.defer(); 
     var promise = deferred.promise; 
     var securityCheckName = 'UserLogin'; 

     WLAuthorizationManager.obtainAccessToken(securityCheckName).then(
       function (accessToken) { 
        console.log('USER IS LOGGED IN!!!'); 
       }, 
       function (response) { 
        console.log("obtainAccessToken onFailure: " + JSON.stringify(response)); 
      } 
     ); 

     promise.success = function(fn) { 
      promise.then(fn); 
      return promise; 
     } 
     promise.error = function(fn) { 
      promise.then(null, fn); 
      return promise; 
     } 

     return promise; 

    } 
} 
}) 

Was derzeit geschieht, ist die RememberMeService genannt wird bei dieser Linie WLAuthorizationManager.obtainAccessToken(securityCheckName).then schlägt fehl, weil WLAuthorizationManager nicht definiert ist. Es ist nicht definiert, weil die wlCommonInit() Funktion in app.js noch nicht fertig ist, es ist die Async-Funktion.

Also, wie kann ich entweder die Steuerung verzögern oder den Service aufgerufen werden, bis die wlCommonInit() Funktion beendet ist und WLAuthorizationManager definiert ist?

Danke für die Hilfe

EDIT

Hier ist meine neue function wlCommonInit() {

function wlCommonInit() { 
var serverUrl = WL.App.getServerUrl(function(success){ 
    console.log(success); 
}, function(fail){ 
    console.log(fail); 
}); 

WLAuthorizationManager.obtainAccessToken().then(
    function (accessToken) { 
     console.log(">> Success - Connected to MobileFirst Server"); 
     angular.bootstrap(document.getElementById('indexBody'), ['app']); 
    }, 
    function (error) { 
     console.log(">> Failed to connect to MobileFirst Server"); 
     console.log(error);   
    } 
); 

meine index.html ist

<body id="indexBody"> 
    <h1>test</h1> 
</body> 

Und ich bekomme Fehler

kError in Success callbackId: WLAuthorizationManagerPlugin887134242 : Error: [$injector:modulerr] Failed to instantiate module ng due to: 
TypeError: Cannot set property 'aHrefSanitizationWhitelist' of null 

bin ich die Bootstrap richtig

+1

Vielleicht wickeln Sie Ihren 'WLAuthorizationManager' in eine eckige Komponente und verwenden Sie diese nicht als globale Variable. Wenn Sie dies wirklich nicht können, verwenden Sie die manuelle Bootstrapping-Methode von eckig, um Ihre App zu starten, wenn sie fertig ist. – mguimard

+0

@mguimard Wenn Sie sagen, "wickeln Sie Ihren WLAuthorizationManager in eine eckige Komponente und verwenden Sie sie nicht als globale Variable" wollen Sie sie in den Service einfügen? – iqueqiorio

+0

Ja, in einem neuen Dienst oder einer neuen Factory können Sie auch die 'wlCommonInit'-Methode für diese neue Komponente bereitstellen, sie aufrufen und auf ihr Ende warten. In jedem Fall ist es selten eine gute Idee, Globals zu verwenden (es sei denn, du machst es gut). Edit: Ich weiß wirklich nichts über MobileFirst V8, und diese wl prefixed Methoden:/ – mguimard

Antwort

Verwandte Themen