firebase $ add().push().set()

Bar*_*ama 5 javascript angularjs firebase angularfire

我正在使用firebase和angularfire.实际上有很多方法可以使用Firebase Api进行CRUD,我仍然没有得到使用的具体区别

  • 使用$ firebaseArray添加$
  • .push()方法
  • .set()方法

我认为它们在技术上是相同的,我更喜欢使用.set方法()而不知道确切的原因,为什么我要使用它.有没有具体的理由不使用它?什么是$ firebaseArray呢?如果我们可以只声明基本参考变量.

在这种情况下:

var usersRef = Ref.child('users');

  $scope.createUser = function() {
    $scope.userRef.child($id).set({
       name: name
           });
      };
Run Code Online (Sandbox Code Playgroud)

要么

$scope.data = $firebaseArray(Ref.child('users'));

$scope.createUser = function() {
  $scope.data.child($id).$add({
    name: name
  });
 };
Run Code Online (Sandbox Code Playgroud)

谢谢.

Aar*_*nco 11

如果我在Firebase中有以下数据树:

{
  users:
   {
      key: { name:"bob" }
   }
}
Run Code Online (Sandbox Code Playgroud)

当我执行$ add时,我将在树中创建一个新项目

$scope.data.child('users').$add({
    name: name
  });
Run Code Online (Sandbox Code Playgroud)

由于$ add使用Firebase中的Push方法,因此在将数据推送到子项时将使用新的随机密钥.

{
  users:
   {[
      key: { name:"bob" },
      key2: { name:"name" }
   ]}
}
Run Code Online (Sandbox Code Playgroud)

如果我在同一个Users对象上设置了一个set,我将覆盖已存在的数据.因此,在您的示例中,如果不指定密钥,您将覆盖整个用户对象.

$scope.userRef.child('users').set({
       name: name
           });
      };
Run Code Online (Sandbox Code Playgroud)

这将导致此数据

{
  users:
   {
      name: "name"
   }
}
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为传递给Set方法的任何空值都将删除最初存在的任何数据.

将null传递给set()将删除指定位置的数据. https://www.firebase.com/docs/web/api/firebase/set.html