$ scope。$观察数组中的特定对象 - Angular JS控制器

时间:2015-03-24 06:54:19

标签: javascript angularjs controllers

我的架构如下。

Orders {
    customers[{
        customerId: String,
        address: String,
        onlineOrder [{
            items...
        }],
        directOrder [{
            items...
        }]
    }]
}

现在,出于某种原因(太大而无法解释)我想要一个监视功能,用于添加到onlineOrder [items]数组的任何项目。

为此,我无法编写像

这样的函数

$范围。$手表( 'order.customer [I] .onlineOrder [j]的')

其中i和j是数组索引。

因为我希望为当前的第i个客户触发监视功能,每次添加/删除/修改'j'在线订单项

我需要帮助。

1 个答案:

答案 0 :(得分:1)

我建议控制您需要观看的阵列的访问权限,这样您就可以自己了解这些更改,而不会导致$watch的效率低下。我不确定你要对这个对象做什么,以及它可以被操作的方式,但是可以说它有用户点击按钮(ng-click)添加的项目。

要控制访问权限,您可以让按钮调用如下函数:

<button ng-click="doWork(orderId, customerId, newOnlineOrder)">Add Order</button>

//in your controller
$scope.doWork = function (orderId, customerId, onlineOrder) {
  //do some work to ensure the order is good, then add it to the collection:
  orders[orderId].customers[customerId].push(onlineOrder);
  //notify anything that needs to know it changed
  notifyMyCode(onlineOrder);
};

通过这种方式,您可以轻松了解更改内容,并控制其被恶意更改,或者意外地,您可以在更新模型之前验证数据,并且您将更快更清楚地了解$watch表达式,因为您控制了更改对象的唯一方法。