2016-08-16 4 views
0

이것은 카테고리 2의 파이어베이스 구조입니다.범위 내에서 Firebase 실시간 데이터가 올바르게 추가되지 않습니다. anglejs

enter image description here

는 이것이 subcategories2입니다.

enter image description here

내가 $ scope.Categories []는이 형식으로 기입 할 화면에 데이터를 표시합니다.

[{ 
    "id": "1", 
    "display_with": "7", 
    "image": "/images/salt_sugar.png", 
    "name": "Salt & Sugar", 
    "subcategories": [{ 
      "scid": "1", 
      "scname": "Sugar Products" 
     }, 

     { 
      "scid": "5", 
      "scname": "Tea" 
     } 

    ] 
}, 

. 
. 
. 
. 


] 

$ scope.Categories []를 채우기위한 논리.

$scope.Categories = []; 
var categoriesRef = firebase.database().ref('categories2'); 

categoriesRef.on('value', function(snapshot) { 
    $scope.Categories = []; 

    var recvCategories = []; 
    recvCategories = snapshot.val(); 

    for (var j=0; j<recvCategories.length; ++j){ 

     var category = recvCategories[j]; 
     //alert (category); 

     if (category != undefined){ 

     var category_modified = {}; 
     category_modified.id = category.id; 
     category_modified.display_with = category.display_with; 
     category_modified.name = category.name; 
     category_modified.image = category.image; 

     var subcategories = []; 

     for(var key in category.subcategories) { 
      var subcategoriesRef = firebase.database().ref('subcategories2/' + key); 
      subcategoriesRef.on('value', function(snapshot2) { 
       subcategories.push(snapshot2.val()); 
      }); 
     } 

     category_modified.subcategories = subcategories; 
     $scope.Categories.push(category_modified); 
     } 
    } 
    $scope.$apply(); 
}); 

데이터를 사용할 수있게되면 화면에 표시하고 싶습니다. 그래서 나는 $ scope를 사용하고있다. $ apply();

데이터가 제대로 표시되지 않는 문제가 있습니다. 일단 다른 컨트롤러로 가서 동일한 컨트롤러로 돌아 오면 모든 것이 예상대로 표시됩니다.

하위 범주 정보가 $ scope.Categories []

+1

최소한의 문제를 재현 할 수있는 jsfiddle/jsbin을 설정할 수 있습니까? –

+0

@FrankvanPuffelen https://jsfiddle.net/py3ofkyc/에서 jsfiddle을 찾으십시오. "click me"버튼을 누르고 로그를 보면 모든 카테고리가 먼저오고 그 다음에는 모든 하위 카테고리가옵니다. 하지만 내가 원하는 것은 첫 번째 범주와 하위 범주를 표시 한 다음 두 번째 범주와 하위 범주를 표시하는 것입니다. –

답변

1

난 그냥 수정하여 바이올린에 제대로 추가되지 않은 이유. 다음 링크를 확인하십시오. https://jsfiddle.net/py3ofkyc/8/

function myFunction() { 
    var subcategories = []; 
    var subcategoriesRef = firebase.database().ref('subcategories2'); 
    subcategoriesRef.on('value', function(snapshot2) { 
     subcategories = snapshot2.val(); 

     var Categories = []; 
     var categoriesRef = firebase.database().ref('categories2'); 
     categoriesRef.on('value', function(snapshot) { 
      var Categories = []; 
      var recvCategories = []; 
      recvCategories = snapshot.val(); 
      _(recvCategories).forEach(function(value) { 
      var category = value; 
      if (category != undefined){ 
       var category_modified = {}; 
       category_modified.id = category.id; 
       category_modified.display_with = category.display_with; 
       category_modified.name = category.name; 
       category_modified.image = category.image; 
       var _subcategories = []; 
       for(var key in category.subcategories) { 
       var data = _.filter(subcategories, { 'scid': key }); 
       _subcategories.push(data[0]); 
       } 
       category_modified.subcategories = _subcategories; 
       Categories.push(category_modified); 
      } 
      }); 
      console.log(Categories); 
     }); 

    }); 
    }` 
+0

이것은 내가 찾고있는 것입니다. 감사합니다 ti2005. 이것은 나를 많이 도왔다. –

관련 문제