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
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
@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
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