【问题标题】:firebase $add() .push() .set()火力基地 $add() .push() .set()
【发布时间】:2016-08-03 00:06:06
【问题描述】:

我正在使用 firebase 和 angularfire。 有很多方法可以使用 Firebase Api 进行 CRUD 实际上,我仍然不明白使用的具体区别是什么

  • $add 与 $firebaseArray
  • .push() 方法
  • .set() 方法

我认为它们在技术上是相同的,我更喜欢在不知道确切原因的情况下使用 .set method(),为什么我会使用它。有什么特别的理由不使用它吗? $firebaseArray 到底做了什么?如果我们可以声明基本引用变量。

在这种情况下:

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

  $scope.createUser = function() {
    $scope.userRef.child($id).set({
       name: name
           });
      };

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

$scope.createUser = function() {
  $scope.data.child($id).$add({
    name: name
  });
 };

谢谢。

【问题讨论】:

    标签: javascript angularjs firebase angularfire


    【解决方案1】:

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

    {
      users:
       {
          key: { name:"bob" }
       }
    }
    

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

    $scope.data.child('users').$add({
        name: name
      });
    

    由于 $add 在 Firebase 中使用 Push 方法,因此在向子节点推送数据时会使用新的随机 Key。

    {
      users:
       {[
          key: { name:"bob" },
          key2: { name:"name" }
       ]}
    }
    

    如果我对同一个用户对象进行设置,我将覆盖已经存在的数据。因此,在您的示例中,如果不指定键,您将覆盖整个用户对象。

    $scope.userRef.child('users').set({
           name: name
               });
          };
    

    这将导致此数据

    {
      users:
       {
          name: "name"
       }
    }
    

    发生这种情况是因为您传递给 Set 方法的任何空值都会删除原来存在的所有数据。

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

    【讨论】:

      猜你喜欢
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 2021-05-04
      相关资源
      最近更新 更多