AngularFire循环非规范化数据

时间:2014-02-07 16:57:20

标签: firebase angularfire

我有类别和子类别。

数据结构类似于blog节目:

categories: {
    -JF1RmYehtF3IoGN9xHG(categoryId): {
      title: "Example",
      subcategories: {
        JF1RmYehtF3IoGN239GJ(subCategoryId): true
      }

现在我以这种方式检索数据(仅适用于一个类别):[controller]

$scope.findOneCategory = function (categoryId) {
    angularFire(Categories.find(categoryId), $scope, 'category');
}

和类别服务

      find: function(categoryId) {
        return FireRef.categories().child('/'+categoryId);
      },

这很好用!

但现在我需要检索类别中的子类别列表并将其绑定到范围,我不知道如何...我目前有这个:

观点:

<div ng-init="findSubCategories()">
<li class="list-group-item" ng-repeat="subCategory in subCategories">{{ subCategory.name }}</li>

控制器:

    $scope.findSubCategories = function() {
      angularFire(Categories.findSubCategories($routeParams.categoryId), $scope, 'subCategories');
    }

服务看起来像这样我试了一下,但这是错的,不知道应该怎么样......如果有人能帮忙我会很高兴的!

      findSubCategories: function(categoryId) {

        var subCategoriesIdsList = FireRef.categories().child('/'+categoryId).child('subcategories');

        subCategoriesIdsList.on("child_added", function(snap) {
              FireRef.subcategories().child("/"+snap.name()).once("value", function(snap) {
                // Render the comment on the link page.
                console.log(snap.val());(i see the object in console but have no idea how to bind it now with the view...:(
              });
        });

      },

不知道如何用角度视图绑定它

1 个答案:

答案 0 :(得分:2)

首先,我建议升级到最新的AngularFire版本(目前是0.6),API已经发生了很大变化,可能更容易完成你想要做的事情。

其次,您应该只为每个类别创建一个绑定,并且子类别ID将自动包含在该数据中,因为它们只是子节点。然后,您需要为子类别名称创建单独的绑定,然后您可以查找您的ID。

假设您的数据如下所示:

categories: {
  -JF1RmYehtF3IoGN9xHG: {
    title: "Example",
    subcategories: {
      JF1RmYehtF3IoGN239GJ: true
    }
  }
},
subCategories: {
  JF1RmYehtF3IoGN239GJ: {
    name: "Example Subcategory",
  }
}

您将创建两个绑定,一个用于类别,另一个用于子类别:

function MyController($scope, $firebase) {
  var ref = new Firebase("https://<my-firebase>.firebaseio.com/");
  $scope.category = $firebase(ref.child("categories/" + categoryID));
  $scope.subcategories = $firebase(ref.child("subCategories"));
}

最后,在您看来,使用从$scope.category中提取的ID从$scope.subcategories获取子类别名称:

<ul ng-repeat="(id, val) in category.subcategories">
  <li>{{subcategories[id].name}}</li>
</ul>