2016-04-12 36 views
0

我正在測試我的android手機中的離子應用程序。我正在使用rootScope函數來檢查用戶的會話,並且此函數在chrome調試控制檯中顯示TypeError(「TypeError:$ rootScope.checkSession不是函數」)。在我的在線搜索中,我能找到的最接近的是 http://www.raymondcamden.com/2014/08/16/Ionic-and-Cordovas-DeviceReady-My-Solution/ 但我並沒有安靜地得到這個概念。如果你能夠幫助,我會很高興。謝謝!.run模塊中的rootScope函數無法識別

這裏是我的代碼:

forkapp.run(function($ionicPlatform, $rootScope, $firebaseAuth, $firebase, $window, $ionicLoading) { 
    $ionicPlatform.ready(function() { 
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
    // for form inputs) 
    var fb = new Firebase("https://glowing-torch-9862.firebaseio.com/"); 
    if (window.cordova && window.cordova.plugins.Keyboard) { 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
    } 
    if (window.StatusBar) { 
     StatusBar.styleDefault(); 
    } 

    $rootScope.userEmail = null; 
    $rootScope.baseUrl = 'https://glowing-torch-9862.firebaseio.com/'; 

    var authRef = new Firebase($rootScope.baseUrl); 
    $rootScope.auth = $firebaseAuth(authRef); 

    $rootScope.show = function(text) { 
     $rootScope.loading = $ionicLoading.show({ 
     content: text ? text : 'Loading..', 
     animation: 'fade-in', 
     showBackdrop: true, 
     maxWidth: 200, 
     showDelay: 0 
     }); 
    }; 

    $rootScope.hide = function() { 
     $ionicLoading.hide(); 
    }; 

    $rootScope.notify = function(text) { 
     $rootScope.show(text); 
     $window.setTimeout(function() { 
     $rootScope.hide(); 
     }, 1999); 
    }; 

    $rootScope.logout = function() { 
     $rootScope.auth.$logout(); 
     $rootScope.checkSession(); 
    }; 

    $rootScope.checkSession = function() { 
     var auth = new FirebaseSimpleLogin(authRef, function(error, user) { 
     if (error) { 
      // no action yet.. redirect to default route 
      $rootScope.userEmail = null; 
      $window.location.href = '#/auth/signin'; 
     } else if (user) { 
      // user authenticated with Firebase 
      $rootScope.userEmail = user.email; 
      $window.location.href = ('#/event'); 
     } else { 
      // user is logged out 
      $rootScope.userEmail = null; 
      $window.location.href = '#/auth/signin'; 
     } 
     }); 
    }; 
    }); //ionic platform ready 
    }) 
+0

可能是因爲'$ rootScope.checkSession()$rootScope.checkSession等$ rootScope功能;在'logout'使用'它被定義之前。 – Daniel

回答

0

你在ionicPlatform.ready事件代碼被執行,並在科爾多瓦的deviceready事件觸發,即,科爾多瓦的設備API後已經加載,並且準備訪問$rootScope.checkSession功能將被定義。

一般來說ionicPlatform.ready等於window.ready事件如果您在瀏覽器中運行離子應用程序並且您的代碼將工作。但是,如果您在移動設備上運行應用程序,則需要一段時間才能觸發ionicPlatform.ready事件。由於您在ionicPlatform.ready中定義了$rootScope.checkSession函數,因此只能在deviceready事件後調用該函數。

一個簡單的解決方案是限定以外的ionicPlatform.ready