如何在Angularfire中使用javascript对象方法

时间:2013-10-16 08:33:30

标签: javascript angularjs firebase angularfire

我有一个代表餐馆订单的对象:

function order () {
  this.customer_name = ''
  this.menu = // menu object
  }

扩展了一些业务逻辑的对象方法,例如:

order.prototype.value = function() {
  var total = 0;
  for (var i = 0; i < this.menu.length; i++) {
    // calculate the order value
  }
  return total;
}

在角度控制器中,订单在提交时被推送到一个数组上(通过从视图中的按钮点击ng):

var ref = new Firebase('https://myfirebase.firebaseio.com');
$scope.orders = [];
angularFire(ref, $scope, 'orders');

$scope.currentOrder = orderService;

$scope.submitOrder = function() {
  $scope.orders.push($scope.currentOrder);
};

将订单推送到数组后,orders[0].customer_name等属性就可以运行,但orders[0].value()等方法却无效。

Firebase / Angularfire只会同步JSON似乎是合理的,但有一种方法可以让我保持与order对象一起包含的与订单相关的逻辑,即无需编写{{1} }?

2 个答案:

答案 0 :(得分:1)

根据Firebase FAQ

,没有很好的方法可以完全按照自己的意愿行事。
  

在低级别,我们支持与JSON基本相同的数据类型:字符串,数字,布尔值和对象(反过来包含字符串,数字,布尔值和更多对象)。

这意味着您可以存储数据但不能存储功能。看起来完成同样事情的一种干净方法是将最新的订单值存储为order对象的属性,并且有一个方法作为orderService的一部分,每当菜单项更新它时被添加或删除。或者,按照你的建议行事并在某个地方设置getOrderValue,但将它放在服务中可能仍然有意义。

答案 1 :(得分:0)

我实际上遇到了同样的问题。 我想在firebase对象中添加一个方法。 在查看最新的angularfire文档后,我发现$ extend可以做到这一点 我还没有测试过,但我认为这是解决问题的方法。