2013-08-02 60 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; 
    } 
}