2014-02-07 5 views
3

У меня есть категории и подкатегории.AngularFire Loop denormalized data

Структура данных как blog показывает:

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

Теперь, чтобы я извлек данных таким способом (только для одной категории): [контроллер]

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

     }, 

не знаю, как связать это с угловым видом

ответ

2

Во-первых, я бы рекомендовал обновление до последней версии AngularFire (в настоящее время 0.6), то API изменился совсем немного, и это может быть проще чтобы выполнить то, что вы пытаетесь сделать.

Во-вторых, вы должны создать только одну привязку для каждой категории, и идентификаторы подкатегорий будут автоматически включены в эти данные, поскольку они являются только дочерними узлами. Затем вам нужно создать отдельную привязку только для имен подкатегорий, после чего вы сможете найти свой идентификатор.

Допустим, что ваши данные выглядит следующим образом:

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, чтобы получить название подкатегории от $scope.subcategories:

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

Будет ли это правильным решением, если это не категории и подкатегории, а сообщения и пользователи, и вы хотите показывать список сообщений одним пользователем? Там может быть много сообщений и много пользователей. Я пробовал много разных способов сделать это, но не могу найти правильный. –

+0

Если список подкатегорий действительно длинный, то, возможно, не имеет смысла загружать все это. В этом случае я получал их один за другим, создавая новый экземпляр $ firebase для каждой подкатегории (или, возможно, просто использовал обычный Firebase API). – Anant

Смежные вопросы