我正在使用MobileFirst v8和Ionic v1.3.1來構建一個應用程序。當應用程序啓動時我在app.js
文件已準備了常規離子角碼等待異步任務完成在開始Angular JS之前
這是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);
}
);
這是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;
}
}
})
目前發生什麼是RememberMeService被稱爲在此行失敗WLAuthorizationManager.obtainAccessToken(securityCheckName).then
,因爲它說WLAuthorizationManager
未定義。它沒有被定義,因爲app.js
中的wlCommonInit()
函數尚未完成,它是異步函數。
那麼如何才能延遲控制器或服務被調用,直到wlCommonInit()
函數完成並定義了WLAuthorizationManager
?
感謝您的幫助
編輯
這是我的新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);
}
);
我的index.html是
<body id="indexBody">
<h1>test</h1>
</body>
而且我得到錯誤
kError in Success callbackId: WLAuthorizationManagerPlugin887134242 : Error: [$injector:modulerr] Failed to instantiate module ng due to:
TypeError: Cannot set property 'aHrefSanitizationWhitelist' of null
我在做引導正確
也許將WLAuthorizationManager包裝在一個角度組件中,並且不要將它用作全局變量。如果您確實無法做到這一點,請使用angular的手動引導方法在準備就緒時啓動您的應用程序。 – mguimard
@mguimard當你說「將WLAuthorizationManager封裝在一個角度組件中,並且不要將它用作全局變量」時,你的意思是將它包裝在Service中嗎? – iqueqiorio
是的,在新的服務或工廠中,您也可以在這個新組件上公開'wlCommonInit'方法,調用它並等待它結束。無論如何,這是使用全局變量的好主意(除非你做得很好)。編輯:我真的不知道任何有關MobileFirst V8,以及那些wl前綴的方法:/ – mguimard