【问题标题】:Updating $scope with firebase使用 firebase 更新 $scope
【发布时间】:2018-04-12 19:01:38
【问题描述】:

我在收到 Firebase 的响应后尝试更新范围(我在应用程序控制器部分执行此操作),这是一个示例代码。 PS 我正在使用 AngularFire、Firebase 和 Angularjs 谢谢你

var app = angular.module("sampleApp", ["firebase"]);

  firebase.initializeApp(config);
  app.factory("mealMacros", ["$firebaseArray",
  function($firebaseArray) {
  var dbRef = firebase.database();
  var userId = sessionStorage.uid;
  var ordersRef = firebase.database().ref('user_info/' + userId + '/orders');
         return $firebaseArray(ordersRef);



  }
]);

app.controller("MealCtrl", ["$scope", "mealMacros",
  function($scope, mealMacros) {
  //  $scope.user = "Guest " + Math.round(Math.random() * 100);
//tried mealMacros.on.. didnt work 
  ordersRef.on('value', function(snapshot) {
                var orders = snapshot.val();

                // Loop and parse order ids here
                for (var key in orders) {
                        var orderId = orders[key]['orderType'];
                       console.log(orderId);
                         $scope.products = orderId;
                    //code not reaching here 
                }

        });

  }
]);

【问题讨论】:

    标签: javascript angularjs firebase angularfire


    【解决方案1】:
      ordersRef.on('value', function(snapshot) {
         var orders = snapshot.val();
        // Loop and parse order ids here
        for (var key in orders) {
           var orderId = orders[key]['orderType'];
           console.log(orderId);
           $scope.products = orderId;
          //code not reaching here 
        }
      });
    

    首先你需要确保你在var orders获得数据

    然后$scope.products = orderId; 在循环中设置相同的变量。也许$scope.products 是一个数组,您想将数据推送到其中? $scope.products.push(orderId);

    最后,在 .on 事件中设置$scope 变量,您需要在函数返回之前调用$scope.$apply()

      ordersRef.on('value', function(snapshot) {
        var orders = snapshot.val();
        console.log(orders); // make sure there's an array here
        for (var key in orders) {
           var orderId = orders[key]['orderType'];
           $scope.products.push(orderId);
        }
        $scope.$apply();
      });
    

    最后一件事,var orderId = orders[key]['orderType']; 可能无法按预期工作,具体取决于您的 var orders 数组的结构。

    如果不行,你可以试试var orderId = key.orderType;

    【讨论】:

    • 完美运行。这可以通过 var orderId = orders[key]['orderType'];无论如何,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多