我在多人游戏中使用AngularFire,看起来AngularFire在首次加载控制器后会删除我的对象。
我正在使用browserify将我的JS文件连接在一起,所以我的所有模块看起来都像CommonJS模块。
我的控制器都是通过ngView
和已定义的路由加载的。我试图了解Firebase中的用户对象是否仅限于用户服务;因此,用户对象的所有AngularFire调用都存在于服务中。
这是我的HomeController:
module.exports = function(ngModule) {
ngModule.controller('HomeController',
function($scope, user) {
if (!$scope.user) {
return;
}
user.getInvitations($scope);
user.getGames($scope);
});
};
我在我定义的auth服务中使用AngularFire的auth。当用户对象进入时,它存储在$ rootScope上。这是我的身份验证服务的片段:
ngModule.run(function(angularFireAuth, warbase, $rootScope) {
// Here's where Firebase does all the work.
angularFireAuth.initialize(warbase, {
scope: $rootScope,
name: 'user',
path: '/login'
});
});
我的用户服务使用{$ 1}}承诺,当用户出现在$ rootScope上时,该承诺会被解析。这是我的用户服务的片段:
gotUser
当我的HomeController由没有游戏且没有邀请的用户加载时,一切都按预期工作。用户创建游戏并显示在主屏幕上。
如果我重新加载页面,则清除用户的游戏对象(来自路径$rootScope.$watch('user', function() {
if (!$rootScope.user) {
return;
}
userRef = warUsers.child(getPlayerId());
userInvitationsRef = userRef.child('invitations');
userGamesRef = userRef.child('games');
gotUser.resolve();
});
// ...
getInvitations: function(scope) {
scope.invitations = [];
gotUser.promise.then(function() {
angularFire(userInvitationsRef, scope, 'invitations');
});
},
getGames: function(scope) {
scope.games = [];
gotUser.promise.then(function() {
angularFire(userGamesRef, scope, 'games');
});
}
)。目前没有代码可以在我的应用程序中删除这些值。
我认为可能会引用AngularFire并同步我在用户服务中设置的空白值,因此我删除了/users/:userId/games/
行。如果我没有在服务范围内设置初始值,我在控制台中收到此错误:scope.games = [];
。
我猜这与我在Uncaught Error: Firebase.set failed: First argument contains undefined
下对控制器生命周期的不熟悉有关,我误用了我的Firebase / AngularFire引用的服务,而且一般的AngularJS新生儿都变成了一个疾驰的球失败了,但我很感激任何人都可以提供的任何指示。