0

我的范围上有一个模型,它是对象的对象。我已经看到了这个,但是我想从模板中执行此操作,因为我在其上定义了一个过滤器。

var App = angular.module('app', []);

App.controller('myCtrl', function($scope) {
$scope.items = {
    { name: 'Cricket bat', cost: '2500', quantity: 0},
    { name: 'Football', cost: '1100', quantity: 0}
};
$scope.cartItems = {};  // This holds the items. I want quantity of each item separately so it's not an array.

我已经定义了一个过滤器getPrice来计算用户购物车中商品的价格。

我在模板中有:

{{ cartItems | getPrice }}

是否可以在任何嵌套对象值(即购物车中的一个项目的数量)更改后更新模板?如果是,如何?

4

2 回答 2

0

看来您的策略总体上并不好。

  1. 一个“对象的对象”,因为你的意思是它{ {id:1}, {id:2} }不是有效的 javascript,并且会产生一个错误。选择对象数组[ {id:1}, {id:2} ]或真实对象{ 1: {id:1}, 2: {id:2} }

  2. @Blackhole 是对的,你不需要看任何东西,插值angular.js 核心的一部分,它会为你做所有棘手的事情。定义一个变量,并在模板中插入它(用括号),过滤它与否,将保持插入值与变量值同步,而无需您做任何其他事情。它甚至是双向绑定的(如果你改变模型,变量也会改变)。您可以通过暂时删除您的过滤器来验证同步:尝试放入您的模板并更新您的购物车,您会看到模板已更新。cartItems{}{cartItems}

  3. 这种模型格式可能更合适

    $scope.items = [
        { name: 'Cricket bat', cost: '2500' },
        { name: 'Football', cost: '1100' }
    ];
    
    $scope.cartItems = [
        { item: { name: 'Cricket bat', cost: '2500' }, quantity: 3 },
    ];
    
于 2015-04-26T17:57:40.940 回答
0

将数量字段移动到 cartItem 对象

$scope.items = {
    { name: 'Cricket bat', cost: '2500'},
    { name: 'Football', cost: '1100'}
};

$scope.cartItems = {
    { name: 'Cricket bat', quantity: 3},
    { name: 'Football', quantity: 6}
};

然后根据上面的 json 更新你的 getprice 过滤器。这应该会在商品价格发生变化时更新购物车中的成本。

于 2015-04-26T12:57:19.813 回答