2013-08-02 62 views
2

我有一個路由決心構件上下面的代碼:解決的角路徑

resolve: { 
    loadData: function ($q) { 
     var deferred = $q.defer(); 
     var fbRef = new Firebase("https://myPathToFirebase"); 
     var auth = new FirebaseSimpleLogin(fbRef, function (error, user) { 
      console.log('resolving. ' + user.id + ', Provider: ' + user.provider); 
      deferred.resolve(); 
     }); 
     console.log('returning..'); 
     return deferred.promise; 
    } 
} 

內FirebaseSamleLogin回調被簡化爲清楚起見 測井顯示,代碼運行正常。用戶標識和提供者(臉書)打印在回調中。 我的問題是,deferred.resolved()不起作用。代碼將不會繼續運行控制器代碼並呈現模板。就好像延期從未解決。 我那種堅持在這裏和任何幫助/建議,將不勝感激 謝謝

+0

使用更多詳細的跟蹤,如'console.log(「Returning promise ...」,deferred.promise)'並讓我們知道是否有幫助。 –

回答

1

我想你可能需要包裝的決心()在$應用()這樣的

var auth = new FirebaseSimpleLogin(fbRef, function (error, user) { 
    console.log('resolving. ' + user.id + ', Provider: ' + user.provider); 
    $scope.$apply(function() { 
     deferred.resolve(); 
    }); 
}); 
+0

聽起來不錯,我想試試。但是,此代碼在config函數內運行,$ scope服務無法在此上下文中注入。 我知道肯定延期。在FirebaseSimpleLogin中調用Resolved()時不起作用。當我在回調之外移動deferred.resolved()時,它可以正常工作 當然,當移出回調時代碼沒有意義 –

0

如果將$ apply()中的resolve()作爲@zsong編寫但使用$ rootscope?

resolve: { 
    loadData: function ($q,$rootscope) { 
     var deferred = $q.defer(); 
     var fbRef = new Firebase("https://myPathToFirebase"); 
     var auth = new FirebaseSimpleLogin(fbRef, function (error, user) { 
      console.log('resolving. ' + user.id + ', Provider: ' + user.provider); 
      $rootscope.$apply(deferred.resolve()); 
     }); 
     console.log('returning..'); 
     return deferred.promise; 
    } 
}