在我的应用程序中有一个用户的情况下,我成功地使用了 AngularFire。
现在我已经启动并运行了身份验证,我注意到在切换用户时分配items
给$scope.items
是灾难性的,主要是由于$scope
未能正确更新。
直接从文档中读取...
var ref = new Firebase('https://<my-firebase>.firebaseio.com/items');
angularFire(ref, $scope, 'items');
我需要这些只是items
当前授权用户的。所以目前,我这样做(如果有更好的方法,请不要犹豫告诉我!)
var ref = new Firebase('https://<my-firebase>.firebaseio.com/items/userId');
angularFire(ref, $scope, 'items');
我userId
使用auth.provider
and生成auth.id
,顺便说一句。现在我的项目被命名为(假设)user1
var ref = new Firebase('https://<my-firebase>.firebaseio.com/items/[user1id]');
angularFire(ref, $scope, 'items');
我将项目添加到$scope.items
$scope.create = function(item) {
$scope.items.push(item)
/* Pretend the user adds these from the interface.
[
{ name: 'eenie' },
{ name: 'meenie' },
{ name: 'miney' },
{ name: 'moe' }
]
*/
}
问题
现在,如果我只是注销并以其他人身份登录,那么该用户神奇地拥有eenie meenie miney
并且moe
因为$scope.items
在注销和登录之间持有数组。
我试图设置$scope.items = []
注销事件,但这实际上清空了所有记录。我正在拔头发。这是我在项目中需要做的 0.001%,这需要我整个周末。
更新新方法
$scope.create = function() {
$scope.selectedDevice = {
name: 'New Device',
userId: $scope.user.provider + $scope.user.id
};
return $scope.devices.push($scope.selectedDevice);
};
$scope.$on('angularFireAuth:login', function(evt, user) {
var promise, ref;
ref = new Firebase('https://mysite.firebaseio.com/users/' + (user.provider + user.id) + '/registry/');
promise = angularFire(ref, $scope, 'devices');
});
它现在将准确地在用户的 id 下创建项目。但是,一旦您注销并重新登录,这些项目仍不会从$scope.devices
. 因此,他们只是将自己添加到数据中,但在新登录的用户下。
更新
我做了很多试验和错误。我可能会以各种可能的组合设置$scope.devices
并[]
移动登录事件。最终起作用的是@hiattp 在接受的答案中的小提琴。