我在我的控制器中使用类似这样的内容(对于每个添加的消息,我都会增加游戏然后删除此消息):
$scope.items = $firebase(messRef);
$scope.items.$on("child_added", function(value) {
var snapshot = value.snapshot;
var name = snapshot.name, data = snapshot.value;
//I need to increment some global value
game.addPeople(data.people);
//then I need to remove this value
$scope.items.$remove(name);
});
当我切换视图并返回此视图时。监听器被调用两次以获得一个附加值(我理解为什么但是......)。哪个地方最好叫$ scope.items。$ off('child_added'); ?
或者是如何防止这种行为的另一种方式?
感谢您的回复
答案 0 :(得分:3)
有点不清楚为什么这里需要child_added。您可能只想在view / ng-repeat代码中直接使用$ scope.items并跳过此步骤。
假设用例是可靠的,那么这里的最佳选择可能是将所有这些移动到每次控制器加载时都不丢失/恢复的服务。
如果需要在控制器中处理,那么监听$ destroy事件应该有效。
function handleAdd(value) {
var snapshot = value.snapshot;
var name = snapshot.name, data = snapshot.value;
//I need to increment some global value
game.addPeople(data.people);
//then I need to remove this value
$scope.items.$remove(name);
}
$scope.items = $firebase(messRef);
$scope.items.$on("child_added", handleAdd);
// remove listener when controller is unloaded
$scope.$on('$destroy', function() {
$scope.items.$off('child_added', handleAdd);
// or if $scope.items will no longer be used...
// $scope.items.$off();
});