我的数据结构如下:
-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);
在HTML
:
<div ng-repeat="emp in emplist" ng-Controller="ChildController">
<p>{{emp.empName}}</p>
<p>{{CompanyName}}</p>
</div>
在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
中的代码尝试执行第{{1}行时它给出了Object.keys($scope.emp.Company)[0]
未定义的错误。此错误导致Company
未执行Step 2
同步firebase
之后的数据。但是当Step 1
执行时,它会更新Step 2
,但firebase-database
会不会在ChildController
实例的更新时执行。
我想到的一个解决方案是,我可以停止ng-repeat
同步数据,直到所有推送查询完成为止?或者你们中的任何人有任何其他解决方案?
有一点需要注意:
上面提到的步骤在同一个应用程序会话中第二次再次运行时成功执行,很奇怪它不会在第一次尝试时运行。
答案 0 :(得分:1)
如果我已正确理解您的问题,那么您可能需要更改推送逻辑。
通过单个推送命令将数据保存在Firebase中的特定节点中总是很方便。据我所知,您尝试分两步推送数据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
的单个对象。然后就像这样使用push。
// 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
}
};