$scope.$watch 数组中的特定对象 - Angular JS 控制器

$scope.$watch a particular object inside an array - Angular JS controller

我的架构如下。

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

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

为此,我无法编写这样的函数,

$scope.$watch('order.customer[i].onlineOrder[j]')

其中 i 和 j 是数组索引。

因为我希望为当前第'i'个客户触发监视功能,对于第'j'个在线订单项的每个add/delete/modify

我需要这方面的帮助。

我建议控制对您需要监视的数组的访问,这样您就可以自己了解更改,而不会出现 $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 表达式,因为你控制了改变对象的唯一方法。