【问题标题】:retrieve all child node from firebase with AngularFire as Array使用 AngularFire 作为数组从 firebase 检索所有子节点
【发布时间】:2023-03-06 21:11:01
【问题描述】:

我得到从 Firebase 返回的结果,其层次结构如下:

[
  [
    {name: "a", id: 1},
    {name: "b", id: 2},
    {name: "c", id: 3}
  ],
  [
    {name: "d", id: 1},
    {name: "e", id: 2}
  ]
]

如何列出该层次结构中的每个名称以用于 ng-repeat?
我可以使用 $asArray() 列出每个数组的名称,但我无法在所有数组中检索它们。我可以将每个数组的索引作为变量吗?
这是我的 ng 重复:

<ul ng-repeat="cha in character">
   <li href="/link/{{each_array_index(1,2,3...)}}/{{cha.id}}">{{cha.name}}</li>
</ul>

【问题讨论】:

  • 乍一看,这种数据结构没有任何意义,尤其是对于stores data as JSON objects并提供实时编辑功能的Firebase。这些数组实际上是对象,不能作为 JSON 数据排序,并且通常不能用于并发。你能解释一下这个数据结构的用例,以及为什么需要推送 id 或平面列表吗?
  • 我创建了平面和嵌套的数据模型。我有 3 个级别(猫 -> 主题 -> 内容)。因此,如果我想检索内容,我需要将类别和主题的 id/title 推送到 Firebase 路径

标签: angularjs firebase angularfire


【解决方案1】:

你需要有两个嵌套的中继器,在你的表达式'cha in character'中,cha 包含一个对象数组;你应该有类似的东西

ng-repeat='列表中的子列表'

ng-repeat='子列表中的字符'

或者,您可以将收到的数组响应展平

var xs = [
  [
    {name: "a", id: 1},
    {name: "b", id: 2},
    {name: "c", id: 3}
  ],
  [
    {name: "d", id: 4},
    {name: "e", id: 5}
  ]
];

var merged = [];
merged = merged.concat.apply(merged, xs);

或者你可以创建一个过滤器

angular.module('myApp', [])

  .controller('HomeCtrl', function($scope){
    $scope.xs = [
  [
    {name: "a", id: 1},
    {name: "b", id: 2},
    {name: "c", id: 3}
  ],
  [
    {name: "d", id: 4},
    {name: "e", id: 5}
  ]
];
  })

  .filter('flatten', function(){
    return function(xs) {
      var merged = [];
      return merged.concat.apply(merged, xs);
    }
  })
  ;




<body ng-app="myApp" ng-controller="HomeCtrl">
    <h1>Hello Plunker!</h1>

    <ul ng-repeat="cha in xs | flatten">
     <li><a href="/link/{{$index}}/{{cha.id}}">{{cha.name}} - {{cha.id}}</a></li>
    </ul>
  </body>

嵌套列表解决方案 在 cmets 中描述

<ul ng-repeat="list in xs">
     <li ng-repeat="cha in list">
       <a href="/link/{{$parent.$index}}/{{cha.id}}">{{cha.name}}</a>
      </li>
    </ul>

【讨论】:

  • 谢谢@JackNova。我喜欢使用 2 个中继器。现在我可以列出每个名字,但我只为字符定义 $index,我找不到子列表的 $index。我怎样才能得到这个?
  • 我需要保留每个父数组的 $index 以根据 REST 检索内容。链接应该是:#/link/1/1、#/link/1/2、#link/1/3、#link/2/1、#link/2/2..
  • 外部 $index 将在 $parent.$index 中
  • $parent.$index 返回数字为 $index: #link/1/1, #link/2/2, #link/3/3... 它们应该是 #link/1 /1,#link/1/2...
  • 最左边是$parent.$index,最右边是$index
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多