AngularJS:观察多个数组中的特定属性
AngularJS : Watch specific properties in multiple arrays
我的angularjs应用程序中有一个表单,里面有很多嵌套对象。我需要观察其中一些嵌套字段的变化。
我有一个销售订单,它有一个名称和一系列项目。每个项目都有一组子项目和一组时间表。我想看一些使"总价"变脏的房产。例如,Quantity、Discount和schedule数据(不包括schedule名称)需要计算新价格(通过ajax)。我想在根作用域"_priceDirty"中设置一个标志,以显示一个刷新价格的按钮。当我添加项目,或将子项目或时间表添加到项目时,同样适用。
如何在angularjs中正确地观察这些属性?对SalesOrder的深入监视是巨大的,我需要自己检查哪些字段发生了更改,因为如果只更改了名称或描述,我不想启用刷新按钮。物品上的$watchCollection可能也不起作用,因为我只想查看里面的一些属性。每次向列表中添加新项目/子项目/时间表时,我都可以在我想要的每个字段中添加一个$watch,但它似乎有很多$watch es(最简单的顺序是9个属性,大约24个属性是正常属性,见下文)
示例
(对标有*的字段的更改应启用刷新按钮)
- 订单名称
- 总价<-(这是通过ajax更新的)
- 总持续时间<-(这是通过ajax更新的)
- 项目
- 项目1
- 名称
- 说明
- 数量*
- 子项目
- 分项1
- 名称
- 说明
- 数量(int)*
- 折扣(布尔)*
- 分项2
- 名称
- 说明
- 数量(int)*
- 折扣(布尔)*
- 分项1
- 附表
- 附表1
- 日程安排名称
- 开始日期*
- 结束日期*
- 开始时间*
- 结束时间*
- 附表2
- 日程安排名称
- 开始日期*
- 结束日期*
- 开始时间*
- 结束时间*
- 附表3
- 日程安排名称
- 开始日期*
- 结束日期*
- 开始时间*
- 结束时间*
- 附表1
- 项目2
- 名称
- 说明
- 数量*
- 子项目
- 分项1
- 名称
- 说明
- 数量(int)*
- 折扣(布尔)*
- 分项1
- 附表
- 附表1
- 日程安排名称
- 开始日期*
- 结束日期*
- 开始时间*
- 结束时间*
- 附表1
- 项目1
我认为您可以用普通的事件侦听器取代角度观察者。我不知道这些值是如何被修改的,但我想有一些输入元素。因此,假设用户修改了"数量"输入字段。这会生成一个输入事件,表示输入值已更改。您可以在包含所有这些输入的元素上只放置一个事件侦听器,并检查更改是否来自您感兴趣的输入,如果是,则进行适当的计算,否则忽略它。这样,您就可以将一堆侦听器/观察者交换为一个观察者,但您必须筛选事件。它还应该解决来自太多观察者的任何性能问题。
您可以将函数传递给$watch
scope.$watch(
function($scope) {
return $scope.DataArr.map(function(dataInstance) {
return dataInstance.SomeProperty;
});
},
function(newVal, oldVal) {
if (newVal) {
//SomeProperty was changed
}
});
将以上内容结合起来,并可能对数据结构进行重构,使其稍微扁平化,应该会让您达到目的。
- 如何在不链接/jquery的情况下使用方法应用css属性数组
- 如何使用lodash返回与模式匹配的属性数组
- 从嵌套属性数组中获取对象嵌套值
- 如何使用 javascript 返回数据属性数组
- JQuery 获取返回的属性数组
- 对公共属性数组进行排序
- Angularjs-ng repeat不反映属性数组中的更改
- JADE&NodeJS访问JSON对象属性数组
- Lodash 按数组的属性数组过滤
- 将对象数组转换为属性数组
- 如何从一个共享属性的jQuery集合中获取一个属性数组
- 骨干移除和新视图不会重置其属性数组内容
- 使用JSON从对象数组创建属性数组
- 将数据属性数组转换为对象
- 从属性数组和匹配属性值数组创建JavaScript对象的有效方法
- 访问json中的属性数组
- jquery.获得没有重复的自定义属性数组
- 如何更新对象属性数组值
- 多属性数组语法
- jQuery:生成"name”;动态属性数组