使用firebase更新$ scope

时间:2018-04-12 19:01:39

标签: javascript angularjs firebase angularfire

我在从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 
                }

        });

  }
]);

1 个答案:

答案 0 :(得分:0)

  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;