我的数据结构如下:
-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.emplist
和ChildController
执行的ng-repeat
实例,当ChildController
中的代码试图执行Object.keys($scope.emp.Company)[0]
行时,给出错误,Company
没有定义。这个错误是由于Step 2
没有执行,firebase
在Step 1
之后同步数据,但是当Step 2
执行时,它更新了firebase-database
,而ChildController
没有在ng-repeat
实例更新时执行。
一个解决方案在我的脑海中,不知何故,我可以停止Firebase
同步数据,直到所有的推查询完成?你们有其他的解决办法吗?
有一点需要注意:
上面提到的步骤执行成功,当我在应用程序的同一会话中再次运行它第二次时,奇怪的是它没有在第一次尝试中运行。
如果我正确理解了你的问题,那么你可能需要稍微改变一下你的推送逻辑。
在Firebase的一个单独的push命令中将数据保存到特定节点总是很方便的。据我所知,您正在尝试分两步推入数据Employees
节点。真的有必要吗?您可以轻松地一次按压empName
和childCompany
。
在您的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) ?
取一个同时包含empName
和childCompany
的对象。然后像这样用力。
// 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
}
};