我在应用程序中有一个用户的场景中成功使用了 AngularFire。
现在我已经启动并运行了身份验证,我注意到分配items
to $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
using 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
and moe
因为$scope.items
保存注销和登录之间的数组。
我尝试设置$scope.items = []
在注销事件上,但这实际上清空了所有记录。我正在拔头发。这只是我项目中需要做的 0.001%,并且花费了我整个周末的时间。
Update新方法
$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
。因此,他们只是将自己添加到数据中,但在新登录的用户下。
Update
我做了很多尝试和错误。我大概设置了$scope.devices
to []
并以各种可能的组合移动登录事件。最终起作用的是@hiattp 在接受的答案中的修改。