2016-08-16 59 views
0

這是category2的firebase結構。Firebase實時數據未在範圍變量中正確添加angularjs

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如果我們點擊「點擊我」按鈕並查看日誌,所有類別都會先到達,然後是所有子類別。但我想要的是顯示第一類別及其子類別,然後顯示第二類別及其子類別等。 –

回答

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。這幫了我很多。 –