Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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
Javascript 使用AngularJS进行动态数据计算_Javascript_Angularjs_Data Binding - Fatal编程技术网

Javascript 使用AngularJS进行动态数据计算

Javascript 使用AngularJS进行动态数据计算,javascript,angularjs,data-binding,Javascript,Angularjs,Data Binding,我想要一个嵌套重复中的小计,可以把它想象成一个购物车,但是购物车被分成产品(鞋子、夹克)或其他嵌套结构 所以我认为有(至少)3种不同的方法可以达到相同的结果。区别是什么,特别是在性能方面,我应该使用哪一种(对于大量数据) 值得注意的是,这更多的是关于数据表示(比如管理视图),而不仅仅是关于如何合计购物车的问题(已经讨论了很多!)。更多关于如何从数据的角度处理它,当你有很多车和很多其他计算,如平均成本,累计成本。。人们在星期二最喜欢的颜色 在模板中 或 观察者 我认为你走错了方向 您应该将总计作为

我想要一个嵌套重复中的小计,可以把它想象成一个购物车,但是购物车被分成产品(鞋子、夹克)或其他嵌套结构

所以我认为有(至少)3种不同的方法可以达到相同的结果。区别是什么,特别是在性能方面,我应该使用哪一种(对于大量数据)

值得注意的是,这更多的是关于数据表示(比如管理视图),而不仅仅是关于如何合计购物车的问题(已经讨论了很多!)。更多关于如何从数据的角度处理它,当你有很多车和很多其他计算,如平均成本,累计成本。。人们在星期二最喜欢的颜色

在模板中 或

观察者
我认为你走错了方向

您应该将总计作为购物车对象的属性。在你看来,你是正常的。 您不想对每个$scope.$digest执行所有“疯狂计算”,但仅在以下情况下执行一次:

  • 添加产品(例如:cart.addProduct(产品))
  • 产品被移除(例如:购物车。移除产品(产品))
  • 数量已更改(例如:购物车更新QTYPRODUCT(productId,qty))

在这些方法的末尾,您调用updateTotalCart()方法并设置对象的属性。

我认为您的方法是错误的

您应该将总计作为购物车对象的属性。在你看来,你是正常的。 您不想对每个$scope.$digest执行所有“疯狂计算”,但仅在以下情况下执行一次:

  • 添加产品(例如:cart.addProduct(产品))
  • 产品被移除(例如:购物车。移除产品(产品))
  • 数量已更改(例如:购物车更新QTYPRODUCT(productId,qty))

在每个方法的末尾,调用updateTotalCart()方法并设置对象的属性。

来自angularjs表达式的官方文档:

如果要运行更复杂的JavaScript代码,应将其设置为控制器方法,并从视图中调用该方法。

我认为这基本上意味着,如果你认为你的计算足够简单,你可以使用角度表达式


但如果计算复杂,最好使用控制器方法。

来自angularjs表达式的官方文档:

如果要运行更复杂的JavaScript代码,应将其设置为控制器方法,并从视图中调用该方法。

我认为这基本上意味着,如果你认为你的计算足够简单,你可以使用角度表达式


但是,如果计算复杂,最好使用控制器方法。

如果我得到某人购买的每辆车的历史记录,该怎么办?当我说动态时,我并不是说我想向购物车添加新项目(addProduct()),更重要的是,如果我选择了另一个人,然后我必须更新他们所有购物车、产品和项目的总数。数据将加载到select上,但我只需要每次计算总数和平均值。所有这些历史记录都来自数据库吗?那么数据库中就已经有总数了,不是吗?如果没有,则可能每个用户都有一个“carts”数组(例如:user.carts=[{products:[…],datetime:…},{products:[…],datetime:…},{},{}]。您可以只循环数组并计算每个购物车的总数。这样做的目的不是在视图中进行计算,而是在加载数据后进行计算。如果您建议使用汇总,则它们不是解决此问题的好方法。问题不在于如何计算总数/平均数(以及其他任何内容)在AngularJS控制器中,根据执行情况将计算放在何处(出于上述性能和原因)。很抱歉,如果我没有澄清这一点,那么计算不应该在控制器中进行。它应该在服务中进行。正如我在第一个回答中所说,计算是在产品添加/修改或更新时进行的,而这是在角度服务中进行的。在控制器中,您应该只指向对象上的计算属性。很抱歉,我除非您详细说明您的代码,否则无法为您提供更多帮助。如果我获得了某人购买的每个购物车的历史记录,该怎么办?当我说“动态”时,并不是说我想向购物车添加新项目(addProduct()),更重要的是,如果我选择了另一个人,然后我必须更新他们所有购物车、产品和物品的总数。数据将加载到select上,但我每次只需要计算总数和平均数。所有这些历史记录是否来自一个数据库?那么数据库中就已经有了总数,否?如果没有,您需要可能每个用户都有一个“carts”数组(例如:user.carts=[{products:[…],datetime:…},{products:[…],datetime:…},{},{}]。您可以只循环数组并计算每个购物车的总数。这样做的目的不是在视图中进行计算,而是在加载数据后进行计算。如果您建议使用汇总,则它们不是解决此问题的好方法。问题不在于如何计算总数/平均数(以及其他任何内容)在AngularJS控制器中,根据执行情况将计算放在何处(出于上述性能和原因)。很抱歉,如果我没有澄清这一点,那么计算不应该在控制器中进行。它应该在服务中进行。正如我在第一个回答中所说,计算是在产品添加/修改或更新时进行的,而这是在角度服务中进行的。在控制器中,您应该只指向对象上的计算属性。很抱歉,我除非详细说明代码,否则无法提供更多帮助。
    <table>
    <tr ng-repeat="product in cart.products">
        <td>{{product.name}}</td>
        <table>
            <tr ng-repeat="item in product.items">
                <td>{{item.name}}</td>
                <td>{{item.cost}}</td>
            </tr>
        </table>
        <td>{{ getProductTotal(product) }}</td>
    </tr>
    <tr>{{ getCartTotal() }}</tr>
</table>
$scope.cart = {
    person: "Nicky poppy pie",
    products: {},
    total: function () {
        var total = 0;
        foreach(product...)
        return total;
    }
};
$scope.cart = {};
$scope.cart.total = getCartTotal()

function getCartTotal() {
    //insert crazy calculations
}
$scope.$watch('cart', function() {
    var cartTotal = 0;
    $scope.cartItems.forEach(function(product) {
      cartTotal += product.cost();
    });
    $scope.cartTotal = cartTotal;
}, true);