【问题标题】:Firebase realtime data in not getting added properly in scope variable angularjsFirebase实时数据未正确添加到范围变量angularjs中
【发布时间】:2016-08-16 06:15:49
【问题描述】:

这是 category2 的 firebase 结构。

这是针对子类别 2。

要在屏幕上显示数据,我希望 $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[] 中没有正确添加

【问题讨论】:

  • 你能设置一个重现最小问题的jsfiddle/jsbin吗?
  • @FrankvanPuffelen 请在jsfiddle.net/py3ofkyc 找到 jsfiddle 如果我们点击“点击我”按钮并查看日志,所有类别都排在第一位,然后是所有子类别。但我想要的是显示第一个类别及其子类别,然后显示第二个类别及其子类别,依此类推..

标签: angularjs firebase firebase-realtime-database


【解决方案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);
      });

    });
  }`

【讨论】:

  • 这就是我想要的。感谢ti2005。这对我帮助很大。
猜你喜欢
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多