假设students
的某些数据属于不同groups
的类(schools
):
{
"students": {
"alexa" : {
"firstName" : "ReJina",
"grade" : 2,
"lastName" : "idk",
...
},
"bobby" : { ... },
"chris" : { ... },
...
},
"schools": {
"springfield" : {
"name" : "Springfield Elementary",
"location" : "123 Main St",
...
},
"quahog" : { ... },
"zion" : { ... },
...
},
"group": {
"one" : {
"members" : {
"alexa" : true,
"bobby" : true,
"chris" : true
},
"school" : {
"springfield" : true
},
"name" : "Math Class"
},
"two" : {
"members" : {
"bart" : true,
"lisa" : true,
"meg" : true,
...
},
"school" : {
"quahog" : true
},
"name" : "Art Class"
},
"three" : { ... },
"four" : { ... },
...
}
}
据我所知,这是以平面方式构建数据的正确方法。如果这不正确,请告诉我。我保留每个项目的相关列表,因此每个班级都需要一个名册(members
),如果我还有一个学生在多个班级(group
)或学校的情况,那些会需要他们参加的班级和学校名单。
现在在HTML
中,我们需要有一个视图,显示所有学校班级(groups
)和每个班级的学生以及同一视图中的学生使用嵌套{{1} }}:
ng-repeat
在控制器中:
<div id="data-table-div" class="col-md-6">
// Get all the groups, and show them one by one
<div ng-repeat="group in groups">
// This works - How do I get the school it is associated to?
// ??
{{group.name}} - {{group's school's name}}
//Start a table
<table>
<thead> <tr> <th>Student Name</th> <th>Grade</th> ... </thead>
<tbody>
// Get the students in each group, and show them one by one
// ??
<tr ng-repeat="student in groups.members">
<td>{{student.name}}</td> <td>{{student.grade}}</td> ...
</tr>
</tbody>
</table>
</div>
</div>
问题:
如何让HTML模板正确迭代angular.module('sofDataViewerApp')
.controller('dataTableController', function ($scope, $firebaseObject, $firebaseArray) {
// This gets all of our groups. It also allows `group.memebers` to render the appropriate number of `<tr>`s as it knows it has N students.
var groupsRef = new Firebase("https://sof-data.firebaseio.com/studyGroups");
$scope.groups = $firebaseArray(groupsRef);
// This will give all the students. How do I get just the template's `group.members` to be each appropriate student?
var studentsRef = new Firebase("https://sof-data.firebaseio.com/students");
$scope.allStudents = $firebaseArray(studentsRef);
});
&#39; groups
我可以访问每个members
的所有数据(例如他们的student
和firstName
)? (我假设它可能涉及控制器中的更好代码,可能还包括HTML)
PLNKR:http://plnkr.co/edit/uAn1Ky9v5NHHDFPs2c6S?p=preview (如果你知道如何在plnkr中注入Firebase和angularFire,那么它应该可行,但我仍然无法解决这个问题,尽管包括它们的CDN ......)
我能理解的最接近的解释是Firebase的this page,他们建议使用grade
,但它没有被描述为什么意思,特别是因为他们谈论的不是通过id搜索。就我而言,LINK_ID
与link
同义,而group
则为comment
。
student
答案 0 :(得分:1)
看起来你正试图加入多个&#34;表&#34;。使用AngularFire的最佳方法是扩展$firebaseArray
(link to docs)。通过这种方式,您可以在添加(或修改)每个子项时从其他位置加载其他数据。
另请参阅Kato的this answer,其中显示了扩展数组(尽管是针对不同的用例)。
最后,您可以考虑将每个屏幕所需的数据复制到该屏幕的列表中。尽管Firebase检索联接数据的速度非常快(它可以保持开放式连接并可以管理多个请求),但如果您需要执行的数据更少,那么它总是会更快。
如果您想显示组中成员的列表,则可以使用此示例:
"group": {
"one" : {
"members" : {
"alexa" : "ReJina",
"bobby" : "Robert",
"chris" : "Christian"
...
因此,我们实际上不是存储true
,而是存储每个成员的名字。这允许我们获取所有数据以通过单个读取操作显示组成员:
ref.child('group/one/members').on('value'...
然后,当用户点击其中一个群组成员时,我们会转到该群组成员的页面并从/students/$studentid
加载数据,并且可能拥有他们所在的群组。在那里也是(及那些团体的名字)的一部分..