我的架构如下。
Orders {
customers[{
customerId: String,
address: String,
onlineOrder [{
items...
}],
directOrder [{
items...
}]
}]
}
现在,出于某种原因(太大而无法解释)我想要一个监视功能,用于添加到onlineOrder [items]数组的任何项目。
为此,我无法编写像
这样的函数$范围。$手表( 'order.customer [I] .onlineOrder [j]的')
其中i和j是数组索引。
因为我希望为当前的第i个客户触发监视功能,每次添加/删除/修改'j'在线订单项
我需要帮助。
答案 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
表达式,因为您控制了更改对象的唯一方法。