【发布时间】:2016-04-17 12:41:50
【问题描述】:
我有一个如下的firebase Auth工厂
app.factory("Auth", ["$firebaseAuth", "FIREBASE_URL","$ionicPlatform",
function($firebaseAuth, FIREBASE_URL, $ionicPlatform) {
var auth = {};
$ionicPlatform.ready(function(){
var ref = new Firebase(FIREBASE_URL);
auth = $firebaseAuth(ref);
});
return auth;
}
]);
我在我的 ui-router 解析中注入 Auth 工厂作为依赖项,但是在配置 ui-router 时,auth 为空,因为平台准备好之后启动。
app.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('menu', {
url: '/menu',
abstract:true,
cache: false,
controller: 'MenuCtrl',
templateUrl: 'templates/menu.html',
resolve: {
auth: function($state, Auth){
//<--Auth is empty here when the app starts ----->
return Auth.$requireAuth().catch(function(){
$state.go('login'); //if not authenticated send back to login
});
}
}
})
在注入 ui-router 之前,如何确保 Auth 工厂不为空?
我试过了-
app.factory("Auth", ["$firebaseAuth", "FIREBASE_URL","$ionicPlatform",
function($firebaseAuth, FIREBASE_URL, $ionicPlatform) {
return $ionicPlatform.ready(function(){
var ref = new Firebase(FIREBASE_URL);
return $firebaseAuth(ref);
});
}
]);
但这会返回一个承诺,这使得它使用起来更加复杂。
编辑: 我在工厂中使用了 promise 来解决问题
app.factory("Auth", ["$firebaseAuth", "FIREBASE_URL","$ionicPlatform","$q",
function($firebaseAuth, FIREBASE_URL, $ionicPlatform, $q) {
var auth = {};
return {
getAuth : function(){
var d = $q.defer();
$ionicPlatform.ready().then(function(){
var ref = new Firebase(FIREBASE_URL);
auth = $firebaseAuth(ref);
d.resolve(auth);
});
return d.promise;
}
};
}
]);
这可行,但我正在寻找更好的解决方案。
【问题讨论】:
-
您似乎在工厂内返回了一个空对象。
-
这就是问题所在。我只想在平台准备好后从工厂返回
标签: javascript angularjs ionic-framework ionic firebase