AngularFire Loop 非规范化数据 [英] AngularFire Loop denormalized data

查看:31
本文介绍了AngularFire Loop 非规范化数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有类别和子类别.

数据结构类似于博客 显示:

类别:{-JF1RmYehtF3IoGN9xHG(categoryId): {title: "例子",子类别:{JF1RmYehtF3IoGN239GJ(subCategoryId):真}

现在我以这种方式检索数据(仅针对一个类别):[控制器]

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

和分类服务

 查找:function(categoryId) {返回 FireRef.categories().child('/'+categoryId);},

这很好用!

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

视图:

<li class="list-group-item" ng-repeat="subCategory in subCategory">{{ 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) {//在链接页面上呈现评论.console.log(snap.val());(我在控制台看到对象,但不知道现在如何将它与视图绑定...:(});});},

不知道如何将其与角度视图绑定

解决方案

首先,我建议升级到最新的 AngularFire 版本(目前是 0.6),API 已经发生了很大的变化,可能更容易完成你的任务正在尝试做.

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

假设您的数据如下所示:

类别:{-JF1RmYehtF3IoGN9xHG:{title: "例子",子类别:{JF1RmYehtF3IoGN239GJ:真的}}},子类别:{JF1RmYehtF3IoGN239GJ:{name: "示例子类别",}}

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

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

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

  • {{subcategories[id].name}}

I have categories and subcategories.

The structure of data is like the blog shows:

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

To now i retrieved the data this way(for just one category):[controller]

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

And Categories service

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

This works good!

But now i need to retrieve a list of subcategories in category and bind it to the scope and i dont know how...i have currently this:

The view:

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

The controller:

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

And the service look like this i tried something but it's wrong and have no idea how it should looks like... if anyone could help i would be so glad!

      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...:(
              });
        });

      },

dont know how to bind this with angular view

解决方案

First, I'd recommend upgrading to the latest AngularFire version (currently 0.6), the API has changed quite a bit and it might be easier to accomplish what you're trying to do.

Second, you should only create one binding for each category and the subCategory IDs will automatically be included in that data since they're just the child nodes. Then you'll need to create a seperate binding just for the subcategory names, which you can then look up your ID.

Let's say your data looks like this:

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

You'll create two bindings, one for categories and another for subcategories:

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"));
}

And finally, in your view, use the ID you extract from $scope.category to get the sub category name from $scope.subcategories:

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

这篇关于AngularFire Loop 非规范化数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆