Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Angularfire中使用javascript对象方法_Javascript_Angularjs_Firebase_Angularfire - Fatal编程技术网

如何在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);
};