【问题标题】:Firebase and Angularjs Scope array of objects undefinedFirebase 和 Angularjs 范围对象数组未定义
【发布时间】:2018-01-17 02:36:43
【问题描述】:

我正在尝试使用 angularjs 显示对象。但在 html 中,它显示为未定义。

app1.controller('ctrl1' , function($scope){ 
  categories = [];
  var dbRef = firebase.database().ref().child('Categories/');
  dbRef.once('value', snap => {

    snap.forEach(function(childSnap) {
      //CATEGORY MODEL
       var category = {
            name : "",
            id  : "",

            subCategories: {
              name: "",
              id: ""
            }

        };
      category.id = childSnap.val().id
      category.name = childSnap.val().name
      category.subCategories = childSnap.val().subCategories
      categories.push(category)
    })

  }).then(() => {
    $scope.allcats = categories;
  });
});

还有html

 <div id="nav-aside " class="nav" ng-controller="ctrl1">
              {{allcats}}
            <ul class="nav-aside-list" ng-repeat="categories in allcats">
              <li><span></span><a href="#">{{categories.name}}</a></li>
            </ul>
          </div>

这不起作用。有谁能帮忙吗? 提前致谢!

【问题讨论】:

  • 为什么要使用分类推送,为什么不直接$scope.allcats?
  • @GauravSrivastava 无论如何,什么都没有显示。我试过:(
  • 在categories.push下面做控制台日志,看看是否有数据来了
  • @GauravSrivastava 是的,数据来了。我猜这是一个异步问题?不是吗?
  • 是的,让我根据异步问题添加一个答案。

标签: javascript angularjs arrays firebase angularjs-scope


【解决方案1】:

将您的代码更改为:

app1.controller('ctrl1' , function($scope){ 
      $scope.allcats = [];
      var dbRef = firebase.database().ref().child('Categories/');
      dbRef.once('value', snap => {

        snap.forEach(function(childSnap) {
          //CATEGORY MODEL
           var category = {
                name : "",
                id  : "",

                subCategories: {
                  name: "",
                  id: ""
                }

            };
          category.id = childSnap.val().id
          category.name = childSnap.val().name
          category.subCategories = childSnap.val().subCategories
          $scope.allcats.push(category);
          $scope.$apply();
        })

      }).then(() => {
        console.log($scope.allcats);
      });
    });

【讨论】:

  • 这适用于控制台。但是在 html 文件中没有数据。因为html在脚本之前运行一次,也许
  • @AralbayIssatayev 角度适用于两种方式绑定,它应该自动反映 html 模板中的更改而不做任何事情。分享一些您的配置代码可能是您的角度设置错误。
  • @AralbayIssatayev 我编辑了我的答案,检查它是否有效。
  • @AralbayIssatayev 很高兴我能帮上忙
猜你喜欢
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多