使用 firebase 更新 $scope

Updating $scope with firebase

我在收到 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 
                }

        });

  }
]);
  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 变量,您需要在函数 returns.

之前调用 $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;