Firebase 使用 Angularjs 删除和检索数据

Firebase delete and retrieve data with Angularjs

我是 firebase 的新手,想知道如何实现删除 Angular 视图(界面)中的数据,但仍将其保留在 Firebase 数据库中。目前,由于三路绑定(使用Firebase.remove()函数),在Angular视图中删除数据时,数据库中的数据也会被删除。在 Plunker 中查看: http://plnkr.co/edit/BBtD2YoUBHBAyhu0puXd?p=info

这是删除用户的部分:

// Remove user
$scope.removeRecord = function(userId) {
    var userUrl = fbURL + user_table + '/' + userId;
    $scope.user = $firebase(new Firebase(userUrl));
    $scope.user.$remove()
    $scope.alerts.splice(0, 1);
    $scope.alerts.push({
        type: 'success',
        msg: "User removed successfully!"
    });
};

或者我是否可以根据我的自定义查询从 Firebase 检索数据?所以也许我可以区分删除的数据和 Firebase 数据库中的现有数据?

尝试这样做:

<button ng-click="removeRecord(user)">Delete</button>

$scope.removeRecord = function(user) {

  user.remove();

  $scope.alerts.splice(0, 1);
  $scope.alerts.push({
    type: 'success',
    msg: "User removed successfully!"
  });
};

这样您就不会在 Firebase 中访问用户,而是在视图中。

您应该将 user 对象而不是其 ID 传递给函数。您这样做的方式是在 Firebase 中而不是在视图中访问用户。

because i want to have all the data in database even it is get deleted

这通常称为 "soft delete",它实际上意味着您只需 将数据标记 为“已删除”。

假设你有这个数据:

messages
    -J4378sdfisdf
        name: "Lisa"
        message: "I am new to firebase, and wondering..."
    -J4378sdfjteg
        name: "Chrillewoodz"
        message: "Try doing this instead..."
    -J4378sdfkufh
        name: "Frank van Puffelen"
        message: "This is typically referred to as a..."

您不是只从视图中删除消息,而是将它们标记为 "deleted"/隐藏。在下面的示例中,我为此目的添加了一个 visible 字段:

messages
    -J4378sdfisdf
        name: "Lisa"
        message: "I am new to firebase, and wondering..."
        visible: true
    -J4378sdfjteg
        name: "Chrillewoodz"
        message: "Try doing this instead..."
        visible: true
    -J4378sdfkufh
        name: "Frank van Puffelen"
        message: "This is typically referred to as a..."
        visible: false

然后您可以使用 Firebase 查询仅获取尚未隐藏的消息:

var ref = new Firebase('https://yours.firebaseio.com');
var query = ref.child('messages').orderByChild('visible').equalTo(true);
$scope.messages = $firebaseArray(query);