Firebase同步处理



我的数据结构如下:

-Company
       |
      -jskdhjJKHh-Yty
        -companyName:CompanyTH
-Employees
   |
  -shdjasjdshy665-333
      |
     -empName:Peter
      |
     -Company
       -jskdhjJKHh-Yty:true

我将Employees的数据按如下方式推入ParentController:

步骤1:

var ref=firebase.database().ref("Employees");
var newKey=ref.push({empName:"John"}).key

设置2:

var childCompany=ref.child(newKey+'/Company');
childCompany.set(true);

步骤3:

$scope.emplist=$firebaseArray(ref);

In HTML:

<div ng-repeat="emp in emplist" ng-Controller="ChildController">
    <p>{{emp.empName}}</p>
    <p>{{CompanyName}}</p>
</div>

In ChildController:

var companyRef=firebase.database().ref("Company/"+Object.keys($scope.emp.Company)[0]);
$scope.CompanyName=$firebaseObject(companyRef);

问题是:

Step 1执行时,同步数据到$scope.emplistChildController执行的ng-repeat实例,当ChildController中的代码试图执行Object.keys($scope.emp.Company)[0]行时,给出错误,Company没有定义。这个错误是由于Step 2没有执行,firebaseStep 1之后同步数据,但是当Step 2执行时,它更新了firebase-database,而ChildController没有在ng-repeat实例更新时执行。

一个解决方案在我的脑海中,不知何故,我可以停止Firebase同步数据,直到所有的推查询完成?你们有其他的解决办法吗?

有一点需要注意:

上面提到的步骤执行成功,当我在应用程序的同一会话中再次运行它第二次时,奇怪的是它没有在第一次尝试中运行。

如果我正确理解了你的问题,那么你可能需要稍微改变一下你的推送逻辑。

在Firebase的一个单独的push命令中将数据保存到特定节点总是很方便的。据我所知,您正在尝试分两步推入数据Employees节点。真的有必要吗?您可以轻松地一次按压empNamechildCompany

在您的ChildController中,您需要向该节点添加一个侦听器,从那里您试图使用ref.on获取数据。这样在成功地将数据存储到Firebase数据库后你就会得到一个回调。

var companyRef=firebase.database().ref("Company/"+Object.keys($scope.emp.Company)[0]);
companyRef.on("value", function(data) {
  // This will be triggered once there's a
  // change in data in the node the reference is referring to
  doSomething();
});

那么我如何在push中使用set(true) ?

取一个同时包含empNamechildCompany的对象。然后像这样用力。

// Get the firebase reference of your node
var ref = firebase.database().ref("Employees");
// Create an object first. 
var employee = {
  empName: "Peter",
  company: "CompanyTH"
};
// Pass the object that you've prepared earlier here. 
ref.push.set(employee);

这只是一个例子。可以有嵌套的对象。我们的想法是一次性传递整个对象,并在Firebase中成功保存时添加回调。你可能也会想到这样的东西。

ref.set(employee, function(error) {
  if (error) {
    doSomethingOnError();
  } else {
    doSomethingOnDataSavedSuccessfully();
  }
});

你可以尝试像这样构建嵌套类

var employee = {
  empName: "Peter",
  Company: {
    companyName: "Name",
    uniqueID: true
  }
};

相关内容

  • 没有找到相关文章

最新更新