如何在Angularfire中使用javascript对象方法
我有一个表示餐厅订单的对象:如何在Angularfire中使用javascript对象方法,javascript,angularjs,firebase,angularfire,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 v
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;
}
一旦订单被推送到数组中,像orders[0].customer\u name
这样的属性就会起作用,但是像orders[0].value()这样的方法就不起作用了
Firebase/Angularfire只同步JSON似乎是合理的,但有没有一种方法可以让我在order
对象中包含与订单相关的逻辑,即不必编写$scope.getOrderValue(orders[0])
?没有一种很好的方法可以完全满足您的需求,由于根据《基本法》:
在底层,我们支持与JSON基本相同的数据类型:字符串、数字、布尔值和对象(它们依次包含字符串、数字、布尔值和更多对象)
这意味着您可以存储数据,但不能存储函数。完成同样任务的一个干净方法似乎是将最新的订单值存储为订单
对象的属性,并在订单服务
中包含一个方法,每当添加或删除菜单项时更新该方法。或者,按照你的建议做,在某个地方有一个getOrderValue
,但把它放在服务中可能还是有意义的。我实际上也有同样的问题。
我想向firebase对象添加一个方法。
在查看最新的angularfire文档后,我发现$extend可以做到这一点
我还没有对它进行测试,但我认为这是一种方法。如果你真的想做你建议的事情,你可以使用函数构造函数(即新函数(orders[0].value)()。只要确保你不信任的人都不能修改你对象上的值属性(例如,运行恶意函数)。是的,这是一个很好的观点,无论值是如何计算或显示用户的“版本”订单的价值不应该是订单真正价值的最终权威,因为它可以在客户端进行操纵。
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);
};