我有一个代表餐馆订单的对象:
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} }?
答案 0 :(得分:1)
根据Firebase FAQ:
,没有很好的方法可以完全按照自己的意愿行事。在低级别,我们支持与JSON基本相同的数据类型:字符串,数字,布尔值和对象(反过来包含字符串,数字,布尔值和更多对象)。
这意味着您可以存储数据但不能存储功能。看起来完成同样事情的一种干净方法是将最新的订单值存储为order
对象的属性,并且有一个方法作为orderService
的一部分,每当菜单项更新它时被添加或删除。或者,按照你的建议行事并在某个地方设置getOrderValue
,但将它放在服务中可能仍然有意义。
答案 1 :(得分:0)
我实际上遇到了同样的问题。 我想在firebase对象中添加一个方法。 在查看最新的angularfire文档后,我发现$ extend可以做到这一点 我还没有测试过,但我认为这是解决问题的方法。