2016-08-11 246 views
0

我正在使用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 

我在做引導正確

+1

也許將WLAuthorizationManager包裝在一個角度組件中,並且不要將它用作全局變量。如果您確實無法做到這一點,請使用angular的手動引導方法在準備就緒時啓動您的應用程序。 – mguimard

+0

@mguimard當你說「將WLAuthorizationManager封裝在一個角度組件中,並且不要將它用作全局變量」時,你的意思是將它包裝在Service中嗎? – iqueqiorio

+0

是的,在新的服務或工廠中,您也可以在這個新組件上公開'wlCommonInit'方法,調用它並等待它結束。無論如何,這是使用全局變量的好主意(除非你做得很好)。編輯:我真的不知道任何有關MobileFirst V8,以及那些wl前綴的方法:/ – mguimard

回答